vue中不同组件的通信方式如下
1 .父子组件,通过prop
2 .从非父子组件、vuex或根vue转载
通常是上述两种情况,但也有特殊情况,例如孙子的组件或更深层次的组件通信
1 .下一个是a.vue
templatedivclass=' test ' son prop=' data '/son/div/template2.下面是son.vue
templatedivgrandsonprop=' data '/grandson/div/templatescriptexportdefault { name 3360 ' son },props 3360 [ ' data ] 阶层少的情况下也没有问题,但阶层多了就可怕了
有人问,为什么不用vuex,简单省事吗?为此引入vuex会降低代码的性价比,项目本身经常不需要使用vuex
那么在这种情况下,provide/inject就会登场
1.provide相当于扩展版的父组件prop
2.inject相当于增强版次组件的props
因为这两者可以与父组件和子组件、孙组件、曾孙.组件数据进行交换。 这意味着,无论prop父子组件数据的交互如何,只要prop是声明的更高级别provide,底层就可以通过inject听到provide中的数据
1 .父组件如下
templatedivclass=' test ' son prop=' data '/son/div/templatescriptexportdefault { name 3360 ' test },provide3360{
template div { { name }/div/templatescriptexportdefault { name : ' grandson ',inject: [name]}/script在此
显然也有坏处。 如果可以在任意级别访问,则数据跟踪将变得困难,并且不知道在哪个级别声明了它,或者在哪个级别或多个级别使用了它。 因此,此属性通常不建议用于启用vuex的vuex,也不建议用于禁用的多播,但在开发组件库时与vuex无关,并且不知道用户使用环境时可以很好地使用