用 Vue Component Slot 實現自定義 HTML

  1. 用 Vue Component Slot 實現自定義 HTML
    1. dynamic component
      1. 不滅的 dynamic component
      2. 可觸發 hook 又永生的 component

用 Vue Component Slot 實現自定義 HTML

之前有Post not found: vue-component-fast-review 快速講一下 component 的各個功能
其中有說到 component 傳值到 content 要靠 slot,是什麼意思呢?在此特別介紹一下。

parent

外層 template 這樣使用

在放在 component 的 content, 是用來取代 slot
多個 slot 時,要指定 slot

<template>
<div>
<component>
<p slot="slotName">指定 slot, 要插入 component 的 html</p>
<p>不指定 slot, 要插入 component 的 html</p>
</component>
</div>
</template>

child

在 component 內,定義 slot : 提供外部 html 插入 template 的位置

<template>
<div>
<slot name="slotName"></slot>
<slot></slot>
</div>
</template>

dynamic component

觸發 created, destroyed 的 component,只要 component 不出現在畫面上,就會把 component 消滅掉,並且下次出現時所有的數值歸 0

hook

  • created
  • destroyed

parents

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<template>
<component :is="targetComponent"></component>
</template>
<script>
export default {
name: 'App',
data () {
return {
targetComponent: 'componentName'
}
},
created () {
console.log('created')
},
destroyed () {
console.log('destoryed')
},
//...
}
</script>

不滅的 dynamic component

component 要永生就加 <keep-alive>

1
2
3
4
5
<template>
<keep-alive>
<component :is="targetComponent"></component>
</keep-alive>
</template>

永生不死,終究有遺憾,不知死為何物。
無法觸發 destory 的 hook

可觸發 hook 又永生的 component

hook

  • deactivated
  • activated
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<template>
<keep-alive>
<component :is="targetComponent"></component>
</keep-alive>
</template>

<script>
export default {
name: 'App',
data () {
return {
targetComponent: 'componentName'
}
},
deactivated () {
console.log('deactivated')
},
activated () {
console.log('activated')
}
//...
}
</script>