两个.vue内引用同一个组件,发生数据错乱
问题的出现:
a页面一个数据改变了b页面渲染的数据也发生了改变
出现的问题所在:
两个子页面引用的组件内watch监听了:
结果:从a跳转到b触发这个方法该变了两个页面都有的变量
其中用了:this.$route.query.trans_no!==undefined判断不让a页面触发,但是这是都在一个页面
1.
2.两个页面用同一个组件会出现数据错乱?
认知的误区: vue中不同路由共用同一个组件,缓存数据。不同路由第一次进入走加载,二次缓存_滚动小人人的博客-CSDN博客_vue多个路由共用一个页面怎么做缓存
问题:
参考:www.cnblogs.com/yanggb/p/12…
一开始我以为那两个子页面用了同一个组件也不会相互干扰
vue有一个重要的理念就是组件化,即将重复使用的功能点抽提出来作为组件,需要使用的页面只需要引用该组件即可得到相应的功能点。
而组件化的一个重要特性就是作用域隔离,即一个组件实例拥有一个私有的作用域,当在页面中引用了该组件之后,只有该组件实例能访问该作用域。
但是当在同一个页面多次使用同一个组件的时候,如果只创建了一个实例,但是却对这个实例调用了两次,这两个调用就会造成相互干扰的问题,因为这时候这两个调用访问的是同一个作用域。比如有现在有一个yanggb组件,我引入到我的页面中(创建了一个组件实例),然后调用两次(在页面上调用组件实例两次),那么当我给第一个调用绑定的对象变量的一个属性赋值了100,那么第二个调用绑定的同一个对象变量的该属性也会被赋值100,因为这两个调用在同一个作用域内绑定了同一个对象变量,而JavaScript内一切对象皆为引用,也就导致第二个调用的值跟着第二个调用的值变化了。
3.Vue-cli构建多页应用方法
4.provide inject
如下图:
0为provide打印的(传递给子孙组件的inject接收)
1为created执行的方法去调用接口请求出来数据,然后赋值给data
5为组件中通过inject接收的数据
可以看到执行顺序:0-1-5,即provide - created -inject
ps:百度了一下 执行顺序beforeCreate ->inject -> Props -> Methods -> Data -> Computed -> Watch ->provide-> created
provide 的数据需要依赖data中的数据,即created请求的数据,
问题就来了,created还没执行就执行了provide 那数据不就传不过去了?