vue3快速上手(二)

vue3快速上手(二)

teleport

Teleport,vue2中书写的组件结构和实际生成的dom结构成映射关系,vue3中可以使用Teleport改变这种映射关系,指定Teleport中的组件插入到指定的dom中
例子
在public/index.html中为#app添加一个兄弟节点#app2

//APP.vue
<h1>这是App中的内容</h1>
    <Teleport to="app2">
      <div style="color:red">这是app2中的内容</div>
    </Teleport>

在这里插入图片描述

v-model

v-model的改变,vue2中双向数据绑定可以使用v-model和.sync,所以在v-model中去掉了.sync,只是用v-model

  • v-model绑定的属性名由原来的value变成了modelValue,事件名变成了update:modelValue
<ChildComponent
  :modelValue="pageTitle"
  @update:modelValue="pageTitle = $event"
/>
相当于
<ChildComponent v-model="pageTitle" />
  • v-model可以使用参数,用来替换掉.sync的功能
    举个例子
//ChildComponent组件
<template>
    <input type="text" :value="inpText" @input="handleInput">
</template>
<script>
    export default {
        props:['inpText'],
        methods:{
            handleInput(e){
                console.log(this.$emit)
                this.$emit('update:inpText',e.target.value);
            }
        }
    }
</script>

在childComponent中传入inpText的属性。输入时触发update:inpText事件

<child-component v-model:inpText="inpText"></child-component>

使用v-model:inpText来进行双向数据绑定
在这里插入图片描述

异步组件

异步组件
在项目中,我们可能需要将代码拆分成很多快,在需要的时候才异步加载相应的模块,来达到提高首屏加载速度的需要,在vue3中提供了defineAsyncComponent来定义异步组件,要求返回一个Promise

util.js
//得到一个异步组件
export function getAsyncComponent(path){
      return defineAsyncComponent({
          loader:async ()=>{
              await delay();
              if(Math.random()<0.5){
                  throw new TypeError()
              }
              return import(`../components/${path}.vue`);
          },
          loadingComponent:Loading,
          errorComponent:{
              render(){
                  return h(Error,"出错")
              }
          }
      })
  }
Home.vue
const Block1 = getAsyncComponent('Block1')
const Block2 = getAsyncComponent('Block2')
export default {
  name: "App",
  components: {
    Block1,
    Block2
  },
};

在这里插入图片描述
其中右边两个都是异步组件,在进入home页面才会异步加载
踩坑
这里踩了个import的坑,动态import的时候不能够直接传入一个变量进去,必须要给出一些信息,比如上面的代码中使用的是…components${path}.vue,这样才能够推断出来,坑了我差不多一个小时…
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值