vue依赖注入 实现祖父组件data数据改变,子孙组件自动跟着改变

59 篇文章 0 订阅
11 篇文章 0 订阅

vue依赖注入 实现祖父组件data数据改变,子孙组件自动跟着改变

1.问题

项目中,层级传递有点深,所以用了依赖注入。主数据是在祖父组件获取的,子孙组件拿来展示(例如el-table的data数据源)。但是祖父组件的数据改变了的话,默认不是响应式的,祖孙组件的数据是不会改变展示渲染的。

2.实现

//祖父组件 定时器模拟数据发生改变
  mounted() {
    setTimeout(
     () => {
        this.demo = {
          data:[]
        }
      }, 5000
   )
  },
  data(){
    return {
      demo: {
        data:[{
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-04',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }]
      }
    }
    },
    provide() {
      return {
         A:() => this.demo
      }
   },

//子孙组件
<template>
    <div>child
        <p>1</p>
        <el-popover placement="right" width="400" trigger="click">
            <el-table :data="B">
                <el-table-column width="150" property="date" label="日期"></el-table-column>
                <el-table-column width="100" property="name" label="姓名"></el-table-column>
                <el-table-column width="300" property="address" label="地址"></el-table-column>
            </el-table>
            <el-button slot="reference">click 激活</el-button>
        </el-popover>
    </div>

</template>

<script>
export default {
    inject: ['A'],
    computed: {
        B() {
            return this.A().data
        }
    },

    mounted() {
        console.log(111, this.A())

    }
}
</script>

主要注意的地方有两个,第一,祖父组件传递的方法最好是一个包含数据的对象;第二,子孙组件computed进行return

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值