开发过程中偶尔会遇到特殊复杂的业务场景。这时候,采用一些冷门的、特殊的技术方案,往往会起到以往的作用,了解其中的一些也有助于知识的扩展。1.provide和inject常见于各种组件库,不建议直接在业务代码中使用。无论嵌套多深;后代组件通过注入接收。//parentcomponent:provide:{//provide是一个提供属性或方法的对象foo:'thisisfoo',fooMethod:()=>{console.log('parentcomponentfooMethodiscalled')}},//childorgrandchildcomponentinject:['foo','fooMethod'],//数组或对象,注入子组件mounted(){this.fooMethod()console.log(this.foo)}//inparent组件下的所有子组件都可以使用inject注意事项:1.provide和inject必须成对使用;2.provide和injectbinding不能响应(但是对于引用类型,因为JS的特性,还是可以对应的)。2.$root//父组件mounted(){console.log(this.$root)//获取根实例,最后所有组件都挂载到根实例上console.log(this.$root.$children[0])//获取根实例的一级子组件console.log(this.$root.$children[0].$children[0])//获取根实例的二级子组件}3.Vue.observable使对象响应。Vue会在内部使用它来处理数据函数返回的对象;返回的对象可以直接在渲染函数和计算属性中使用,变化时会触发相应的更新;它也可以用作最小化的跨组件状态存储,用于简单的场景。通信原理本质上是使用Vue.observable实现一个简单的vuex//文件路径-/store/store.jsimportVuefrom'vue'exportconststore=Vue.observable({count:0})exportconstmutations={setCount(count){store.count=count}}//使用
