vue3.0重点

vue3.0中文官网

应用实例 & 组件实例:

  1. Vue3 以 Vue.createApp 创建 vue实例的【不是 Vue2 的new Vue 创建】,参数就是 根组件实例。
    const app = Vue.createApp({ /* 选项 */ })
    
  2. 应用实例暴露的大多数方法都会返回该同一实例,允许链式:
    Vue.createApp({})
      .component('SearchInput', SearchInputComponent)
      .directive('focus', FocusDirective)
      .use(LocalePlugin)
    
  3. Vue挂载应用,使用 mount 方法:与大多数应用方法不同的是,mount 不返回应用本身。相反,它返回的是根组件实例。
    const vm = app.mount('#app')  // vm 是根组件实例,而不是 应用实例
    

模板语法

  1. 指令 动态参数:【指令 的动态参数 很少使用到】
    <a v-bind:[attributeName]="url"> ... </a>  // attributeName是 组件的 property 值,即vue的 data变量。如,令 attributeName="href",那么这个绑定将等价于 v-bind:href
    
  2. 同样事件的 绑定也可以是动态的:
    <a v-on:[eventName]="doSomething"> ... </a>
    

Class 与 Style 绑定

  1. 在组件上绑定 HTML Class:
    如果你的组件有多个根元素【vue2的组件只有一个根元素,vue3是可以多个根元素的】,你需要定义哪些部分将接收这个类。可以使用 $attrs 组件属性执行此操作:
     <div id="app">
      <my-component class="baz"></my-component>
    </div>
    
    const app = Vue.createApp({})
    
    app.component('my-component', {
     template: `
       <p :class="$attrs.class">Hi!</p>
       <span>This is a child component</span>
     `
    })
    

事件处理

修饰符

自定义事件

【组件标签中才会使用自定义事件,原生标签中没有自定义事件】

  1. 推荐 始终使用 kebab-case 的事件名,即自定义的事件名,使用 kebab-case 命名【全部小写的,短横线命名】。

  2. 自定义组件的 v-model:【组件标签的 v-model 修改 才意义;原生标签中 无法修改v-model传递参数,也没有意义】

    • 默认情况下,组件上的 v-model 使用 modelValue 作为 prop 和 update:modelValue
      作为事件。我们可以通过向 v-model 传递参数来修改这些名称:
    • 分析:默认情况 v-model 中 v-bind 绑定的 modelValue属性【vue2中绑定的是value属性】。通过 v-model 传递参数,可以修改v-model绑定的props 属性名。
    <my-component v-model:foo="bar"></my-component>
    
    const app = Vue.createApp({})
    
    app.component('my-component', {
      props: {
        foo: String
      },
      template: `
        <input 
          type="text"
          :value="foo"
          @input="$emit('update:foo', $event.target.value)">
      `
    })
    
  3. 组件上多个 v-model 绑定:基于上面讲的 通过向 v-model 传递参数,可以修改 v-model 绑定不同的 属性。从而实现 组件中 可以 多个 变量 实现双向绑定。

    <user-name
      v-model:first-name="firstName"
      v-model:last-name="lastName"
    ></user-name>
    
    const app = Vue.createApp({})
    
    app.component('user-name', {
      props: {
        firstName: String,
        lastName: String
      },
      template: `
        <input 
          type="text"
          :value="firstName"
          @input="$emit('update:firstName', $event.target.value)">
    
        <input
          type="text"
          :value="lastName"
          @input="$emit('update:lastName', $event.target.value)">
      `
    })
    

插槽

  1. 插槽 渲染作用域: 插槽 里面 变量的作用域 是 其 所在模板中 作用域。不能访问 子组件内的作用域。
  2. 插槽的 后备内容:在插槽没有提供内容的时候被渲染。【在 slot 没有内容输入进来时,就会渲染 slot 里面默认是值】
  3. 具名插槽: 元素有一个特殊的 attribute:name; 一个不带 name 的 出口会带有隐含的名字“default”。
  4. 作用域插槽【让插槽内容能访问子组件的数据】:默认是 无法访问的,通过给 slot 设置 插槽 prop。就可以把 子组件的 数据,传递到 插槽内容上。
  5. 动态插槽名
  6. 具名插槽的缩写: 跟 v-on 和 v-bind 一样,v-slot 也有缩写,即把参数之前的所有内容 (v-slot:) 替换为字符 #。

提供 / 注入【provide 和 inject】:

父组件可以作为其所有子组件的依赖项提供程序,而不管组件层次结构有多深。这个特性有两个部分:父组件有一个 provide 选项来提供数据,子组件有一个 inject 选项来开始使用这个数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值