vue3组合式笔记

这篇具有很好参考价值的文章主要介绍了vue3组合式笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

分页示例代码:

  <!-- 示例dialog组件引入 -->
  <flight-dialog :key="addKey" ref="flightDialogRef" @submit="submit"></flight-dialog>
  
  const flightDialogRef = ref();
  // 调用子组件的方法
  flightDialogRef.value.init(key.value);
  // 调用父组件的方法
  const submit = (qarIds: sgtring[]) => {
	  qarIdValue.qarIds = qarIds;
	  recordParamsSavaAll();
	};
<template>
  <el-dialog v-model="visible" title="选择航班" @close="onClose">
    <el-table
      ref="multipleTableRef"
      @selection-change="handleSelectionChange"
      :data="data.dataLists"
      style="width: 100%"
      :row-key="(row) => row.qarId"
    >
      <el-table-column type="selection" :reserve-selection="true" width="55" />
      <el-table-column prop="qarId" label="航班ID" width="180" />
      <el-table-column prop="tkoApt" label="起飞机场" width="180" />
      <el-table-column prop="lndApt" label="着陆机场" width="180" />
      <el-table-column prop="tkoTime" label="起飞时间" width="180" />
      <el-table-column prop="lndTime" label="着陆时间" width="180" />
    </el-table>
    <el-pagination
      :current-page="data.page"
      :page-sizes="[10, 20, 50, 100]"
      :page-size="data.limit"
      :total="data.total"
      layout="total, sizes, prev, pager, next, jumper"
      @size-change="pageSizeChangeHandle"
      @current-change="pageCurrentChangeHandle"
    >
    </el-pagination>
    <div class="flight-dialog-footer">
      <el-button @click="onClose">取消</el-button>
      <el-button type="primary" @click="dataFormSubmitHandle">确定</el-button>
    </div>
  </el-dialog>
</template>

<script lang="ts" setup>
import { reactive, ref, watch } from "vue";
import baseService from "@/service/baseService";
import { useI18n } from "vue-i18n";
import { ElMessage, ElMessageBox } from "element-plus";
import basModuleApi from "@/api/basModuleApi";
import { IObject } from "@/types/interface";
import acRegUrl from "@/api/bas/basAcReg";
const { t } = useI18n();
const visible = ref(false);
// 子组件调用父组件的方法
const emits = defineEmits(["submit"]);

// 列表数据
let data = reactive({
  dataLists: [] as any[],
  page: 1,
  limit: 10,
  total: 10,
  params: {
    qarType: -1,
  },
});
const multipleTableRef = ref<InstanceType<typeof ElTable>>();
const multipleSelection = ref<any[]>([]);
// 复选框事件
const handleSelectionChange = (val: any[]) => {
  multipleSelection.value = val;
};
// 关闭
const onClose = () => {
  visible.value = false;
  data.dataLists = []; // 清空数据
  multipleTableRef.value!.clearSelection(); // 取消复选框
};

// pageSize改变
const pageSizeChangeHandle = (val: number) => {
  data.page = 1;
  data.limit = val;
  flightRequest();
};

// 分页, 当前页
const pageCurrentChangeHandle = (val: number) => {
  data.page = val;
  flightRequest();
};

// 初始化数据
const init = (qarType: number) => {
  visible.value = true;
  data.params.qarType = qarType;
  data.page = 1;
  data.limit = 10;
  flightRequest();
};

const dataFormSubmitHandle = () => {
  if (multipleSelection.value.length > 0) {
    ElMessageBox.confirm("你确定要执行实时计算吗?", "执行确认", {
      confirmButtonText: "确定",
      cancelButtonText: "取消",
      type: "warning",
    }).then((val: string) => {
      const qarIds: String[] = multipleSelection.value.map(item =>  item.qarId);
      emits("submit", qarIds);
    });
  } else {
    ElMessage.warning("请选择要测试的航班");
  }
};

// 获取信息
const flightRequest = () => {
  baseService
    .get("/sys/derqarflight/getListByQarTypeId", {
      limit: data.limit,
      page: data.page,
      qarTypeId: data.params.qarType,
      isvalid: "Y",
    })
    .then((res) => {
      if (res.code == 0) {
        data.dataLists = res.data.list;
        data.total = res.data.total;
      }
    });
};

// 暴漏给父节点对象的方法 父组件获取子组件的方法
defineExpose({
  init,
});
</script>
<style scoped>
.flight-dialog-footer {
  display: flex;
  justify-content: center;
  align-items: center;
  margin-top: 20px;
  margin-bottom: 20px;
}
</style>

dfdf {{count}} {{state.count}}
{{computedValue}}

// // 校验 submit 事件
// submit: ({ email, password }) => {
// if (email && password) {
// return true
// } else {
// console.warn(‘Invalid submit event payload!’)
// return false
// }
// }
// })

// function submitForm(email, password) {
// emit(‘submit’, { email, password })
// }
// <input
// type=“text”
// :value=“lastName”
// @input=“$emit(‘update:lastName’, $event.target.value)”
// />
import { onMounted, watch, watchEffect, computed, nextTick, reactive, ref } from “vue”;
import { CacheToken } from “@/constants/cacheKey”;
import baseService from “@/service/baseService”;
import { setCache } from “@/utils/cache”;
import { ElMessage } from “element-plus”;
import { getUuid } from “@/utils/utils”;
import app from “@/constants/app”;
import { useAppStore } from “@/store”;
import { useRouter } from “vue-router”;
import { useI18n } from “vue-i18n”;

const store = useAppStore();

const router = useRouter();
const { t } = useI18n();

// 在一个特定的 DOM 元素或子组件实例被挂载后,
// 获得对它的直接引用。这可能很有用,比如说在组件挂载时将焦点设置到一个 input 元素上,
// 或在一个元素上初始化一个第三方库
const inputRef = ref<HTMLInputElement | null>(null)

// 定义响应式变量
const count = ref(0);
// 返回原始对象的代理对象(proxy)
const raw = { count: 0 };
// 定义响应式对象
const state = reactive(raw)

// 一个计算属性 ref
const computedValue = computed(() => {
return state.count > 3 ? ‘Yes’ : ‘No’
})

// 侦听状态后,执行异步操作; 不能直接侦听响应式对象的属性值
watch(state, async (newValue, oldValue) => {
console.log(newValue.count, oldValue.count);
})

// getter函数侦听
watch(() => state.count, (count)=>{
console.log(‘getter-count-watch’+count);
})
// 多属性侦听
watch([() => state.count, state], ([count, state])=>{
console.log(‘多-getter-count-watch’+count);
console.log(‘多-count-watch’, state.count);

// 立即执行;获取更新后的dom

},{ immediate: true, flush: ‘post’ })

// 副作用侦听
watchEffect(() => {
// 立即执行watch
console.log(‘watchEffect’ + state.count)

},{flush: ‘post’ })

const clickment = () => {
count.value++;
state.count++;
// raw.count++;
nextTick(() => {
// 访问更新后的 DOM

// ref
(inputRef.value as any).focus()

})
}
// 在组件完成初始渲染并创建 DOM 节点后运行
onMounted(() => {
console.log("count: " + count);
});

setTimeout(() => {
onMounted(() => {
// 异步注册时当前组件实例已丢失
// 这将不会正常工作
})
}, 100)

父子组件传值

props接收的是字符串不需要加冒号:url,变量才需要冒号:visible文章来源地址https://www.toymoban.com/news/detail-460663.html

// 父组件 监听事件@refreshDataList
<import url="dfdf" title="fafa" :visible="false" ref="importRef"  @refreshDataList="refreshDataListHandle"></import>
// 父组件调用子组件的方法
const importRef = ref();
const importHandle = () => {
  importRef.value.init(`sys/qardecodetypeconf/upload?qarTypeId=${1}`)
}
// 监听事件
const refreshDataListHandle = (bol:boolen) => {
  conosle.log(bol);
}


// 子组件
const props = defineProps(["url","title","visible"])
console.log(props.url);
console.log(props.title);

// 子组件绑定事件
const emit = defineEmits({
  refreshDataList: (bol:boolean)=>{
    if (bol != null) {
      return true
    } else {
      console.warn('Invalid submit event payload!')
      return false
    }
  }
});
// 子组件发布事件
emit.refreshDataList(true)

// 子组件方法
const init = (path: string) => {
  visible.value = true;
  url.value = getTokenUrl(path);
  console.log(url.value)
  
  fileList.value = [];
};
// 子组件暴露方法
defineExpose({
  init
});

到了这里,关于vue3组合式笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 快速入门vue3组合式API

    快速入门vue3组合式API

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 使用create-vue创建项目 熟悉项目目录和关键文件  组合式API  setup选项 setup选项的写法和执行时机 script setup 语法糖 reactive和ref函数 reactive() ref() computed watch 侦听单个数据

    2024年02月12日
    浏览(8)
  • Vue3 组合式函数,实现minxins

    Vue3 组合式函数,实现minxins

    截至目前,组合式函数应该是在VUE 3应用程序中组织业务逻辑最佳的方法。它让我们可以把一些小块的通用逻辑进行抽离、复用,使我们的代码更易于编写、阅读和维护。 根据官方文档说明,在 Vue 应用的概念中, “组合式函数”是一个利用 Vue 组合式 API 来封装和复用有状态

    2024年02月08日
    浏览(8)
  • 【Vue3】如何创建Vue3项目及组合式API

    【Vue3】如何创建Vue3项目及组合式API

    文章目录 前言 一、如何创建vue3项目? ①使用 vue-cli 创建  ②使用可视化ui创建  ③npm init vite-app   ④npm init vue@latest 二、 API 风格 2.1 选项式 API (Options API) 2.2 组合式 API (Composition API) 总结 例如:随着前端领域的不断发展,vue3学习这门技术也越来越重要,很多人都开启了学习

    2024年02月03日
    浏览(5)
  • vue3组合式api单文件组件写法

    一,模板部分  二,js逻辑部分 

    2024年02月13日
    浏览(13)
  • vue3 组合式 api 单文件组件写法

    Vue3 中的 Composition API 是一种新的编写组件逻辑的方式,它提供了更好的代码组织、类型推导、测试支持和复用性。相比于 Vue2 的 Options API,Composition API 更加灵活和可扩展。 在 Composition API 中,我们使用 setup 函数来定义组件的逻辑部分。setup 函数是一个特殊的函数,在创建组

    2024年02月12日
    浏览(9)
  • vue3组合式写法在方法中出发点击事件

    vue3组合式写法在方法中出发点击事件

    问: 用vue3组合式写法,如何在一个方法中调用a标签的点击事件 回答: 在Vue 3的组合式API中,可以通过ref来获取DOM元素的引用,然后使用$el属性访问DOM元素并触发其点击事件。下面是示例代码: 在上述代码中,首先通过ref创建了一个名为linkRef的引用变量,并将其初始化为

    2024年02月15日
    浏览(6)
  • vue3:7、组合式API-watch

    vue3:7、组合式API-watch

     

    2024年02月09日
    浏览(10)
  • 带你了解vue3组合式api基本写法

    本文的目的,是为了让已经有 Vue2 开发经验的 人 ,快速掌握 Vue3 的写法。 因此, 本篇假定你已经掌握 Vue 的核心内容 ,只为你介绍编写 Vue3 代码,需要了解的内容。 一、Vue3 里 script 的三种写法 首先,Vue3 新增了一个叫做组合式 api 的东西,英文名叫 Composition API。因此 Vu

    2024年02月01日
    浏览(6)
  • vue3 组合式api中 ref 和$parent 的使用

    vue3 组合式api中 ref 和$parent 的使用

    ref 的使用 vue3中, 在 组件中添加一个 component ref=“xxx” ,就可以在父组件中得到 子组件的 dom 对象, 以及 虚拟的 dom 对象, 有了虚拟 dom, 我们就可以在父组件中控制子组件的显示了 ref 的使用方法 vue3中ref 的特点 以上如果在vue2中,就可以使用 子组件的对象来改变子组件的

    2024年02月10日
    浏览(18)
  • Vue3的组合式API中如何使用provide/inject?

    听说 Vue 3 加入了超多酷炫的新功能,比如组合式 API 等等。今天我们就来聊聊 Vue 3 中的组合式 API,并且如何使用 provide/inject 来搞定它! 首先,我们来了解一下组合式 API 是什么。其实,组合式 API 就是一个用来构建和组合函数的工具,它能让我们的代码更加简洁、可读性更

    2024年02月11日
    浏览(6)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包