持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情juejin.cn/post/714765…
动态组件
有些场景需要在两个组件间来回切换,比如Tab界面(类似于条件渲染。v-if和v-show)写法更加简单。(当然这是自己感觉的,官方文档没这样讲,可以这样理解),他可以实现多个组件进行切换(一般用在Tab标签页,仅限于组件的销毁和重建,尽量不要用在侧导航,侧导航一般使用路由来实现的)
写法:利用元素添加一个is属性来实现
is属性的值是哪个组件就渲染哪个组件,可以通过动态修改属性的值来动态渲染组件。
如下所示:
因为没有过多的操作,所以直接在点击事件上写了表达式,来修改data里的数据。使组件变更。
在组件上使用Keep-alive
当在这些组件之间切换的时候,你有时会想保持这些组件的状态,以避免反复重新渲染导致的性能问题。
动态组件时机是对组件的销毁和重建的过程。被销毁的组件之前的所有操作记录都被销毁,重建时不会保留之前的数据(例如:当你点击一个组件的其中一个子组件时,然后去点击另一个组件,再次点击前一个组件的话,之前的操作记录不会保存,而是默认显示。)
Keep-alive能把被销毁的组件之前的操作记录等都缓存在内存中。
写法:用元素将动态组件包裹起来。keep-alive包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。如下所示:
效果:
keep-alive可以指定动态组件的缓存,通过include属性。指定组件。如下:
keep-alive还有两个属性。 1.exclude不缓存那个组件 2.max:最多缓存多少个组件
异步组件
指的是异步加载组件(react中异步引入组件用的是import方法,异步加载资源)需要的时候请求。
在大型应用中,我们可能需要将应用分割成小一些的代码块,并且只在需要的时候才能服务器加载一个模块。为了简化,vue允许你一一个工厂函数的方式定义你的组件,这个工厂函数会异步解析你的组件定义。vue只有在这个组件需要被渲染的时候才会触发改工厂函数。且会把结果缓存起来供未来重渲染。
当使用局部注册的时候,你也可以直接提供一个返回Promise的函数:
异步组件工厂函数也可以返回一个如下格式的对象:
解析DOM模板时的注意事项
尽量不要在<ul><ol><tabel><select>里面直接放组件会有问题。而是放在<li><tr><option>的is属性上,从而被渲染出来<br/>
访问根实例
在根实例上写数据,被包裹的组件都能得到。通过$root访问。如下:<br/>
引入的子组件也能访问。也是通过$root:
访问父级组件实例
和$root类似,$parent.property可以用来从一个子组件访问父组件的实例。他提供了一种机会,可以在后期随时触发父级组件。以替代将数据以props的方式传入子组件的方式。
注意:在绝大数情况下,触发父级组件会使你的应用更难以调试和理解,尤其是当你变更了父级组件的数据ide时候,当我们稍后回看那个组件的时候,很难找出那个变更是从哪里发起的。(也就是说:嵌套太多,比如父亲的父亲,中间一层修改的话,很难找到是哪一个修改了。还是要用原始传值方式(只适合简单的小型的项目))
访问子组件实例或子元素
1.在子组件调用的时候,给子组件加一个ref属性,属性名自定义。
2.在事件处理函数里面通过this.$refs.属性名.子组件的data名。即可。
父组件:
子组件:
强制更新
组件中的状态(data)没有发生改变也想让组件更新,可以强制更新。(这种情况极少出现)。可以通过this.$forceUpdate()<br/>
v-once
通过v-once创建低开销的静态组件(只用在静态组件)用来确保内容只计算一次然后缓存起来。<br/>