美文网首页
vue3特性二

vue3特性二

作者: wyc0859 | 来源:发表于2022-02-27 16:11 被阅读0次

    Ref

    指定类型

    const ids = ref<number[]>([])
    delIds.value.push(id)
    

    计算属性computed()用法

    <script setup>
    import { computed } from "vue";
    let num = 1;
    const cput = computed(() => {
      console.log("计算属性:", num);
      num++;
      return num;
    });
    console.log("end:", cput); // 这样调用,不会执行计算属性内部,也就不会打印
    console.log("end:", cput.value); //这样调用,会执行计算属性内部;结果2
    //html部分用{{cput}}默认是用了 cput.value,所以也会打印
    </script>
    

    useRouter与useRoute的区别

    useRouter返回 router实例,相当于在模板中使用$router,必须在setup中调用
    useRoute返回 当前路由地址,相当于在模板中使用$route,必须在setup中调用


    template #号

    <template #title> 中的 #为 v-slot 简写

     <template #title>
          <menu-item :title="route.meta.title" :icon="route.meta.icon"></menu-item>
    </template>
    

    defineProps 和 defineEmits

    在 <script setup> 中必须使用 defineProps 和 defineEmits API 来声明 props 和 emits ,它们具备完整的类型推断并且在 <script setup> 中是直接可用的:


    modelValue 和 update:modelValue

    .sync 将替换为 v-model

    <ChildComponent :title.sync="pageTitle" />
    <!-- 替换为 -->
    <ChildComponent v-model:title="pageTitle" />
    

    已将 prop 和 event 命名更改为
    modelValue 和 update:modelValue

    <template>
      <input :value="msg" @change="changeValue" />
    </template>
    
    <script lang="ts" setup>
      import { defineProps, defineEmits } from 'vue'
    
      const props = defineProps({
        msg: {
          type: String,
          required: true
        }
      })
    //这样在函数中就不需要this.$emit()方式调用了
      const emit = defineEmits(['update:msg'])//先声明有几个
     function changeValue(e: InputEvent) {
        //调用其中一个
        emit('update:msg', e.target.value)
      }
    </script>
    
    

    过滤器 or 全局属性

    vue3 过滤器已被移除,用 全局属性 替代

    挂载到vue原型链
    // main.js 
    const app = createApp(App)
    app.config.globalProperties.$http = xxx;  // 注册全局方法
    app.config.globalProperties.$global_var = 'xxx'; // 注册全局属性
     
    组件中使用
    import {getCurrentInstance} from 'vue'
    const {proxy} = getCurrentInstance();
    console.log(proxy.$http)
    console.log(proxy.$global_var)
    

    将 props 传递给路由组件

    vue3中,路由传参,需要 props 配置来解除这种行为:

    const User = {
      template: '<div>User {{ $route.params.id }}</div>'
    }
    const routes = [{ path: '/user/:id', component: User }]
    

    替换成

    const User = {
      props: ['id'],
      template: '<div>User {{ id }}</div>'
    }
    const routes = [{ path: '/user/:id', component: User, props: true }]
    

    这允许你在任何地方使用该组件,使得该组件更容易重用和测试。

    相关文章

      网友评论

          本文标题:vue3特性二

          本文链接:https://www.haomeiwen.com/subject/zpdtrrtx.html