0x-Vue3.0

image-20200723170734421

参考资料:

x. vue3组件定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<div id="box">
{{myname}}
<navbar myname="aaa">
<div>111111111111111</div>
</navbar>
<sidebar></sidebar>
</div>

<script>
var obj = {
data() {
return {
myname: "jerry"
}
},
methods: {}
computed: {}
}
var app = Vue.createApp(obj)
app.component("navbar", {
props: ["myname"],
template: `
<div>
navbar-{{myname}}
<slot></slot>
</div>
`
})
app.component("sidebar", {
template: `
<div>123123123</div>
`
})
app.mount("#box")
</script>

y. vue3自定义指令

y.1 生命周期

  • created : 在绑定元素的属性或事件监听器被应用之前调用。
  • beforeMount : 指令第一次绑定到元素并且在挂载父组件之前调用。
  • mounted : 在绑定元素的父组件被挂载后调用。
  • beforeUpdate: 在更新包含组件的 VNode 之前调用。
  • updated: 在包含组件的 VNode 及其子组件的 VNode 更新后调用。
  • beforeUnmount: 当指令与在绑定元素父组件卸载之前时,只调用一次。
  • unmounted: 当指令与元素解除绑定且父组件已卸载时,只调用一次。

与组件的生命周期,除了没有 beforeCreate 外,其他都一样。

y.2 指令轮播

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<div id="box">
<header>导航</header>
<div class="swiper">
<div class="swiper-wrapper">
<!-- 绑一个自定义指令 v-swiper,传参为对象解构 -->
<div class="swiper-slide" v-for="(item, index) in datalist" :key="item"
v-swiper="{index: index, length: datalist.length}">
{{item}}
</div>
</div>
<!-- 如果需要分页器 -->
<div class="swiper-pagination"></div>

<!-- 如果需要导航按钮 -->
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
</div>
<footer>底部内容</footer>
</div>


<script>
// 自定义指令 v-swiper
var obj = {
data() {
return {
datalist: []
}
},
mounted() {
setTimeout(() => {
this.datalist = ["aaa", "bbb", "ccc"]
//过早
}, 2000)
},
}

var app = Vue.createApp(obj)
app.directive("swiper", {
mounted(el, binding) {
console.log("inserted", el, binding.value)
// 如果最后一个节点插入到父节点中了,就可以 new Swiper 初始化了
let { index, length } = binding.value
if (binding.value = length) {
console.log("new Swiper")
new Swiper(".swiper", {
// direction: 'vertical', // 垂直切换选项
loop: true, // 循环模式选项
// 如果需要分页器
pagination: {
el: '.swiper-pagination',
},
// 如果需要前进后退按钮
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
// 自动轮播
autoplay: {
delay: 2500,
disableOnInteraction: false,
},
})
}
}
})
app.mount("#box")
</script>

0x-Vue3.0
https://janycode.github.io/2018/05/22/04_大前端/04_Vue/0x-Vue3.0/
作者
Jerry(姜源)
发布于
2018年5月22日
许可协议