Vue实践与总结——组件与数据

2020-06-27  本文已影响0人  xymspace

Vue实现组件化流程

let app = new Vue({
  template:`<div>hello world</div>`
})
app.$mount('#app')

注意:组件生成的结构(DOM)会替换掉挂载点元素,所以挂载点不可以是html、body。

组件对数据的处理

let app = new Vue({
  template:`<div>hello world</div>`
  data:{
    name:'xiaoming'
  }
})
app.$mount('#app')

组件化规则

  1. 符合HTML标签命名规则
  2. 不能与原生HTML标签重名

可复用组件类型

组件的属性传递

类似给函数定义形参

props: ['name', 'age'],
props谁定义谁修改。遵循单向数据流原则。
子类通过 $emit('change',属性名) 的事件方式通知父类,父类修改属性值

data() { 
  return {
  // 可以访问到props
  name:'xiaoming',
  age:18
  }
}
computed: {
    // 仅读取
    aDouble: function () {
      return this.a * 2
    },
    // 读取和设置
    aPlus: {
      get: function () {
        return this.a + 1
      },
      set: function (v) {
        this.a = v - 1
      }
    }
  }
watch: {
    a: function (val, oldVal) {
      console.log('new: %s, old: %s', val, oldVal)
    },
    // 方法名
    b: 'someMethod',
    // 该回调会在任何被侦听的对象的 property 改变时被调用,不论其被嵌套多深
    c: {
      handler: function (val, oldVal) { /* ... */ },
      deep: true
    },
    // 该回调将会在侦听开始之后被立即调用
    d: {
      handler: 'someMethod',
      immediate: true
    },
    // 你可以传入回调数组,它们会被逐一调用
    e: [
      'handle1',
      function handle2 (val, oldVal) { /* ... */ },
      {
        handler: function handle3 (val, oldVal) { /* ... */ },
        /* ... */
      }
    ],
    // watch vm.e.f's value: {g: 5}
    'e.f': function (val, oldVal) { /* ... */ }
  }

非 prop 特性

一个非 prop 特性是指传向一个组件,但是该组件并没有相应 prop 定义的特性,这些 props 会被自动添加到组件的根元素上。

替换/合并已有的特性

默认情况下,非prop 特性的属性会覆盖组件根元素上同名的内容,但是针对 styleclass 有特殊的处理,它们会合并(同名样式还是会覆盖)。

禁用特性继承

如果你不希望组件的根元素继承特性,你可以在组件的选项中设置 inheritAttrs: false,我们可以通过组件的 this.$attrs 来获取这些属性。

注意 inheritAttrs: false 选项不会影响 styleclass 的绑定。

动态组件

keep-alive 组件

使用了 keep-alive 的组件会触发 activateddeactivated 两个生命周期函数

activated

keep-alive 组件激活时调用

deactivated

keep-alive 组件停用时调用

单文件组件

单文件组件把一个组件所包含的 结构样式行为、分别通过 templatestylescript 进行分离,然后统一组织在一个文件中。

上一篇 下一篇

猜你喜欢

热点阅读