Vue底层是双向绑定;在特定的情况下,需要手动触发“刷新”操作,目前有四种方案可以选择:
· 刷新整个页面(最low的,可以借助vue router机制)
· 使用v-if标记(比较low的)
· 使用内置的this.$forceUpdate方法(较好的)
· 使用key-changing优化组件(最好的)
· 使用provide/inject实现强制刷新(子组件根据父组件值进行强制刷新,也是使用了v-if原理)
1.刷新整个页面
2.使用v-if标记
如果是刷新某个子组件,则可以通过v-if指令实现。我们知道,当v-if的值发生变化时,组件都会被重新渲染一遍。因此,利用v-if指令的特性,可以达到强制刷新组件的目的。
流程分析:
1、初始化的时候refresh值为 true,组件渲染;
2、当我们调用refreshComp时,refreshComp会立刻变为false;
3、这个时候因为值为false组件就会停止渲染;
4、然后在nextTick中将refresh的值重新设置回去,组件重新渲染。
3.使用内置的this.$forceUpdate方法
组件内置this.$forceUpdate方法,使用前需要在配置中启用。
注意:forceUpdate只会强制更新页面,不会更新现有的计算属性。
4.使用key-changing优化组件
原理很简单,vue使用key标记组件身份,当key改变时就是释放原始组件,重新加载新的组件。
5.应用实例——进入页面输入框自动聚焦(页面有缓存时,只有第一次进入页面生效)
一般情况下,使用指令
但是在有缓存的页面,一般就只有第一次会聚焦,后面进入都不会聚焦,办法就是用第四种强制刷新输入框来聚焦 6.使用provide/inject强制刷新
也是使用v-if原理,只是子组件中根据父组件中的值进行强制刷新