006.组件的补充
Posted Ruovan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了006.组件的补充相关的知识,希望对你有一定的参考价值。
01. 组件化基础
- 三个API
- 属性
prop
- 定义组件可配置属性
- 单向数据流
- 事件
event
- 自定义事件
- 通过
$emit
派发事件,通过$on
监听这个事件
- 插槽
slot
- 分发组件内容
- 属性
前面内容已经讲解,此处略过
02. 监听组件的生命周期
-
比如有父组件
Parent
和子组件Child
,如果父组件监听到子组件挂载mounted
就做一些逻辑处理,常规的写法可能如下:// Parent.vue <Child @mounted="doSomething"/> // Child.vue <script> mounted() { this.$emit("mounted"); } </script>
-
还有一种特别简单的方式,子组件不需要任何处理,只需要在父组件引用的时候通过
@hook
来监听即可,代码重写如下:<Child @hook:mounted="doSomething"/>
-
当然这里不仅仅是可以监听
mounted
,其它的生命周期事件,例如:created
,updated
等都可以
03. 动态组件
-
Vue提供了一个方法来实现动态组件,也称为元组件
- 即:将组件动态绑定到
is
特性上,依靠is
的值来决定哪一个组件被渲染
<template> <component :is="component_name"></component> </template> <script> export default { data(){ return { // 动态组件 component_name: 'component1' // component2、component3... } } } </script>
- 即:将组件动态绑定到
04. 递归组件
-
当组件拥有 name 属性的时候,就可以在它的内部递归调用自己
但是如果没有结束条件的情况,直接递归会报错,所以针对递归组件,我们需要加上结束条件
<template> <my-component></my-component> </template> <script> export default { name: 'myComponent' } </script>
05. 如何在子组件更新父组件的值?
-
第一种方式:通过向父组件派发一个自定义事件,由父组件进行修改,并响应到子组件
-
第二种方式:传递引用类型的数据
- 父组件通过属性绑定的方式传值给子组件,子组件通过props属性接收数据,这是单向数据流
- 但通过
props
传入的值是引用类型的,如数组、对象- 那么子组件对
props
的改动也可以影响父组件的状态 - 但不建议在子组件直接修改
props
传入的值
- 那么子组件对
-
第三种方式:通过
.sync
修饰符(详情请看下一章)
06. 如何重新渲染组件?
-
切换
v-if
的true | false
,可以让组件重新渲染-
v-if
的切换会直接销毁和重建DOM节点// 自定义一个方法 changeFlag(){ this.flag = false; // 设置为false,不渲染该节点 this.$nextTick(() => { this.flag = true; // 在nextTick中重新渲染 }) }
-
-
当组件上的
key
值改变时,组件自动重新渲染changeKey(){ // 更新 key 值 this.keyValue++ }
-
使用
this.$forceUpdate()
,强制执行更新- 对于数据更新,但视图没有更新的情况可以使用
forceUpdate(){ this.$forceUpdate() }
以上是关于006.组件的补充的主要内容,如果未能解决你的问题,请参考以下文章