1、provide(提供)和inject(注入)

这对选项须要一起应用,容许一个先人组件向其所有子孙后代注入一个依赖,不管组件档次有多深,并在其上下游关系成立的工夫里始终失效

第一种用法 :provide间接提供动态对象,inject注入这个对象提供的key,即可应用

let child = {                  //子组件  inject:['king','three'],     //子组件接收数据    data(){      return {        age:25    }  },  mounted(){      console.log(this.king,this.three)  //应用父组件提供的数据  }}let vm = new Vue({    provide(){      //父组件提供数据。  或者  provide:{king:'js',three:25}        return {              king:'js',          three:25        }    },    data(){        return {            name:'js1'        }      },    components:{        child    }})

第二种用法 :provice提供本身组件的data数据源,inject注入这个对象,即可应用

let child = {                  //子组件  inject:['vmData','abc'],    data(){      return {        age:25    }  },  mounted(){      console.log(this.vmData.name)   //调用父组件提供的动静name属性        console.log(this.abc)  }}let vm = new Vue({  provide(){           return {        vmData:this,        abc:123    }  },  data(){    return {        name:'js1'    }  },  components:{    child  }})

第三种用法 :针对inject用对象接管的状况**

let child = {    inject:{        vmd:'vmData',    //  vmData为provide提供的字段名        abccc:'abc'    //  abc为provide提供的字段名    },    data(){      return {        age:25    }  },  mounted(){      console.log(this.vmd.name)   //调用父组件提供的动静name属性        console.log(this.abccc)  }}let vm = new Vue({  provide(){              return {        vmData:this,        abc:123    }  },   data(){        return {            name:'js1'        }  },  components:{      child  })}

2、动静属性和动静事件

<div @[methodname]="onEvent" :[someattr]="'我是内容'">  <!--此处绑定为dbclick事件及title属性-->  js </div>data: {    methodname:'dblclick',    someattr:'title'}methods: {  onEvent() {    console.log(123);  }}

3、style的某个属性绑定多个值

<div :style="sty1"> js</div>data: {  sty1: {    background: 'red',    fontSize: '40px',    display: ['-webkit-box', '-ms-flexbox', 'flex']    }}

4、template包裹多个元素显示暗藏

<button @click="abc=!abc">abc</button><div>123</div><template v-if="abc">  *** 能够用template包裹,template不会真正渲染在页面    <div :style="sty1">js</div>    <h3>h3</h3></template>data: {  abc: true,},

5、未被子组件prop接管的属性'

父组件传的属性给子组件,如果子组件没有用prop接管,这些 属性 会被增加到这个组件的根元素上。
如果你心愿组件的根元素继承非prop属性,你能够在组件的选项中设置 inheritAttrs: false。例如:

Vue.component('my-component', {  inheritAttrs: false,  // ...})

也能够指定元素继承非prop属性:通过 $attrs

<com v-model="num" style="background:red" b="2" d="d" abc="666"> </com>Vue.component('com', {    inheritAttrs:false,    props: ['abc'],    template: `      <div><h1 v-bind="$attrs"></h1></div>   `})

最终渲染为

留神 inheritAttrs: false 选项不会影响 style 和 class 的绑定。style和class会照常继承

6、$listeners将组件事件绑定到外部任意标签

如果在组件上间接绑定一个blur事件, 然而子组件根元素不肯定是input事件,所以在其余标签上监听blur事件就静默失败,所以要用$listeners把事件转移到其余元素身上

Vue.component('com', {  inheritAttrs: false,  props: ['num'],  computed: {    inputListeners() {                             //把事件对象存到计算属性      let vm = this;      return Object.assign({}, this.$listeners, {  //this.$listeners应用组件时增加的事件对象        input(event) {                   //此处是为了兼容v-model的默认input事件          vm.$emit('input', event.target.value)        }      })    }  },  template: `     <div>       <h1 v-bind="$attrs">我是大标签</h1>       <input type="text" :value="num" v-on="inputListeners"/>                                          <!--用v-on 接管代理全副事件到input身上-->     </div> `})<com v-model="num" @blur="onBlur" style="background:red" b="2" d="d" abc="666"> </com>

7、.sync对Prop数据进行双向绑定

通常应用组件时通过子组件触发$emit("update:属性名",新值) 来更新父组件的数据

该性能的快捷办法:.sync修饰符

<div class="wrap">  {{obj.name}}  <com v-bind.sync="obj" > </com>   //绑定对象    // 或者<com :title.sync="val" > </com>   //绑定单个属性</div>        data: {  val: 3,  obj: {    name: 'js',    age: 25  }}子组件template: `    <div>        <h1            @click="$emit('update:name','新的name值')">        自动更新obj的name值           我是内容                  </h1>     </div>  `

8、@hook:申明周期(监听子组件申明周期)

Vue.component('com', {  data() {    return {      obj: {        name: 'js',        age: 25      }    }  },  props: [],  methods: {    aaa() {      this.obj.name = 'js1'    }  },  template: `    <div>        <p @click="aaa">aaa事件</p>    </div>  `})父组件<com @hook:updated="md"></com>  //监听子组件updated生命周期methods: {  md() {    console.log('子组件数据更新触发');   }},