• vue 组件间 8 大通讯方式 之二 provide/ inject ref / refs


    三、provideinject (使用于多层渗透父子组件)

    provideinject 是vue2.2.0新增的api, 简单来说就是父组件中通过provide来提供变量, 然后再子组件中通过inject来注入变量。

    注意: 这里不论子组件嵌套有多深, 只要调用了inject 那么就可以注入provide中的数据,而不局限于只能从当前父组件的props属性中回去数据

    举例验证

    接下来就用一个例子来验证上面的描述:
    假设有三个组件: A.vue、B.vue、C.vue 其中 C是B的子组件,B是A的子组件

    // A.vue
    
    <template>
      <div>
        <comB></comB>
      </div>
    </template>
    
    <script>
      import comB from '../components/test/comB.vue'
      export default {
        name: "A",
        provide: {
          for: "demo"
        },
        components:{
          comB
        }
      }
    </script>
    // B.vue
    
    <template>
      <div>
        {{demo}}
        <comC></comC>
      </div>
    </template>
    
    <script>
      import comC from '../components/test/comC.vue'
      export default {
        name: "B",
        inject: ['for'],
        data() {
          return {
            demo: this.for
          }
        },
        components: {
          comC
        }
      }
    </script>
    // C.vue
    <template>
      <div>
        {{demo}}
      </div>
    </template>
    
    <script>
      export default {
        name: "C",
        inject: ['for'],
        data() {
          return {
            demo: this.for
          }
        }
      }
    </script>

    四、ref / refs

    ref:如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;如果用在子组件上,引用就指向组件实例,可以通过实例直接调用组件的方法或访问数据, 我们看一个ref 来访问组件的例子:

    // 子组件 A.vue
    
    export default {
      data () {
        return {
          name: 'Vue.js'
        }
      },
      methods: {
        sayHello () {
          console.log('hello')
        }
      }
    }
    // 父组件 app.vue
    
    <template>
      <component-a ref="comA"></component-a>
    </template>
    <script>
      export default {
        mounted () {
          const comA = this.$refs.comA;
          console.log(comA.name);  // Vue.js
          comA.sayHello();  // hello
        }
      }
    </script>

    小结:

    provide/inject  ref/refs  都只适用于 父子组件  ,其中provide/inject  适用于多层级自父组件渗透到子组件的情况,同时provide/inject 是单向的 自上而下的。

  • 相关阅读:
    【2017-5-24】WebForm 条件查询
    【2017-5-24】WebForm 分页功能
    【2017-5-22】Application ViewState RepeaterCommand用法
    【2017-5-21】问题总结 Session,Cookie,登录状态保持
    【2017-5-20】传值基础 复合控件
    【2017-5-18】WebForm Repeater的使用 简单控件
    JavaScript Bind()趣味解答 包懂~~
    无题
    移动端横屏(beta)
    常用CSS居中
  • 原文地址:https://www.cnblogs.com/benbonben/p/14958025.html
Copyright © 2020-2023  润新知