赞
踩
这部分主要对Vue3.0的新增API以及特性进行整理
<script type="module" src="/src/main.ts"></script>
<script type="text/javascript"></script>
传统script标签的代码加载容易导致全局作用域污染,而且要维系一系列script的书写顺序,项目一大,维护起来越来越困难。ES module 通过声明式的暴露和引用模块使得各个模块之间的依赖变得明显。使得项目在维护上更加方便容易。
<teleport to="#modal">
<div id="center">
<h2>自定义组件</h2>
</div>
</teleport>
<body>
<div id="app"></div>
<div id="modal"></div>
<script type="module" src="/src/main.ts"></script>
</body>
//img子组件 <template> <img :src="result && result.imgUrl" /> </template> <script lang="ts"> import axios from 'axios' import { defineComponent } from 'vue' export default defineComponent({ async setup() { const rawData = await axios.get('请求地址') return {result:rawData.data} } }) //父组件 import ImgBox from "./components/ImgBox.vue"; <template> <div> <Suspense> <template #default> <Img-box /> </template> <template #fallback> <h1>Loading...</h1> </template> </Suspense> </div> </template> </script>
这部分主要对Vue3.0与Vue2.0的差异进行比对
下面是一个更加直观的对比:
Vue2--------------vue3
beforeCreate -> setup()
created -> setup()
beforeMount -> onBeforeMount
mounted -> onMounted
beforeUpdate -> onBeforeUpdate
updated -> onUpdated
beforeDestroy -> onBeforeUnmount
destroyed -> onUnmounted
activated -> onActivated
deactivated -> onDeactivated
errorCaptured -> onErrorCaptured
大家都知道Vue2中响应式的数据只需要定义在data函数中然后return就行,在Vue3.0 中依旧可以采用这种方式来进行,但是Vue3.0 中引入的setup函数可以完全替代之前旧版本的data、methods 等等。下面就是一个setup 函数:
<template> <tabbarCom :active="active" /> </template> setup(props,ctx) { const data = reactive({ active: 0, taskList: [], getData: () => { getsopList({}) .then((result: any) => { data.taskList = result; }) .catch((err) => {}); }, }); onMounted(() => { data.getData(); }); const refData = toRefs(data); return { ...refData }; },
Vue2中也有watch-监听器(侦听器),作用是用来侦测响应式数据的变化,并且可以得到newValue新值和oldValue老值。如果你熟悉Vue2一定熟悉这个函数,但在Vue3中watch有了一些细微的变化。
//2.0 watch: { list(old, newVal) { this.page = 1; }, }, //3.0 import {... , watch} from "vue" //watch 函数需要写在setup中 //overText为你要监听的变量 watch(overText, (newValue, oldValue) => { }); //同时监听多个变量 watch([overText, overText1], (newValue, oldValue) => { console.log(`new--->${newValue}`); console.log(`old--->${oldValue}`); console.log(newValue[0]); //返回的newValue也是一个数组 });
Vue2.0中emit 抛出的时候可以直接通过this.$emit 调用,但是在3.0x中我们需要先对抛出的函数在emits中进行声明,然后才能在函数中调用。案例如下:
emits: ["linkto"]
setup(props: any, ctx: any) {
const data = reactive({
linkTo: (item: any) => {
ctx.emit("linkto", item.externalUserid);
},
const refsData = toRefs(data);
return { ...refsData };
//无参数
const filterMsg =computed( () => msg.value + "fdfasdf")
//有参数
const filterMsg2 =computed(() => {
return function(num) {
return msg.value + num
}
})
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。