provide/inject 这对选项须要一块儿使用,以容许一个祖先组件向其全部子孙后代注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效。javascript
说明vue
特别说明 java
提示:provide 和 inject 绑定并非可响应的。这是刻意为之的。然而,若是你传入了一个可监听的对象,那么其对象的属性仍是可响应的。数组
最近就碰到了这个问题ide
// 父级组件提供 'foo' var Provider = { provide: { foo: 'bar' }, // ... } // 子组件注入 'foo' var Child = { inject: ['foo'], created () { console.log(this.foo) // => "bar" } // ... }
按照上边的例子,发现若是修改了Provider的foo值,Child的foo并无随着更改。官网也说了provide并非响应的。为了解决这个问题 须要把foo变成vue的监听的对象,换句话说就是须要把foo变成对象函数
var Provider = { provide() { return {datas:this.contain }}, data() { return { contain:{ foo:'foo' } }; }, } var Child = { inject: ['datas'], created () { console.log(this.datas.foo) // => "foo" } // ... }
这样修改以后foo就是响应的了this