欧欧欧,竟然已经到第29天了,时间真的是咻咻咻就过了呢!明天就要结束了,真是感伤(☍﹏⁰) (解脱了ε٩(๑> ₃ <)۶з)
今天跟昨天一样来讲讲components
啦~但components
能学得真的太多了,两篇实在还是讲不完(绝对不是我懒ㄛ),所以今天先给大家举个小例子,剩下的用法属性大家就去Vue.js官网看看吧,那我们继续gogogoヽ(✿゚▽゚)ノ
我们可以使用Vue.component
来注册组件,因为组件是可复用的Vue instance,所以跟new Vue
一样使用选项物件(options)设定组件的定义,但el
属性定义挂载目标只有new Vue
可以使用(因为它是根节点),所以组件需要使用template
或是render
函数设定目标模板。
<div id="app">
<button-counter></button-counter>
</div>
<script>
Vue.component('button-counter', {
data: function () {
return {
count: 0
}
},
template: '<button v-on:click="count++">你点了我 {{count}} 次─=≡Σ((( つ•̀ω•́)つ</button>'
})
var vm = new Vue({
el: '#app',
data:{
}
});
</script>
在这里我们注册一个叫做button-counter
的组件,这个组件的模板是定义在 template
上的button
,button
上有设定一个click
事件,按钮按下去会使组件里设定的资料属性 count 加一。
这边我们用的component
是全域注册,所以只要在new vue
挂载的DOM元素中使用注册组件时设定的名称button-counter
就可以在HTML上把组件挂在到目标位置上罗( ~'ω')~
结果会像这样!
在同个 Vue instance中,我们可以同时使用多个相同的组件,像下面这样:
<div id="app">
<button-counter></button-counter>
<br/>
<button-counter></button-counter>
<br/>
<button-counter></button-counter>
</div>
这样我们就会有三个按钮出现在画面上了,他们每个都有自己独立的实体属性,像是count
,所以按下按钮增加的次数就只有那个组件本身,其他的组件不会跟着改变。
来看看结果╰(°▽°)╯
data
必须是个函数当我们定义<button-counter>
组件时,会发现它的data不是像在vue instance中一样直接提供一个object:
data: {
count: 0
}
在component中,它的data必须是一个函数,这样每个instance才可以维护自己返回的object:
data: function () {
return {
count: 0
}
}
如果Vue中没有这条规则的话,每个按钮都会影响到其他的按钮:
Prop
向子组件传递数据Prop
是让我们可以在组件上注册的一些自定义的attribute
。当一个值传递给一个prop attribute
的时候,它就变成了那个组件实例的一个property
。
在这边我们可以试着帮我们的按钮加上标题,用一个props
option定义一个title
属性,我们可以在模板内进行应用及渲染,像在这边我们把这个title
加在” 你点了我 {{count}} 次─=≡Σ((( つ•̀ω•́)つ”的前面:
Vue.component('button-counter', {
props:['title'],
data:function () {
return {
count: 0
}
},
template: '<button v-on:click="count++">{{title}}你点了我 {{count}} 次─=≡Σ((( つ•̀ω•́)つ</button>'
})
在按钮这边我们可以加上属性对应的内容:
<div id="app">
<button-counter title="1. "></button-counter>
<br/>
<button-counter title="2. "></button-counter>
<br/>
<button-counter title="3. "></button-counter>
</div>
就可以看到这个title
属性生效了!
任何的 Vue instance,包括new Vue
及component
,因为render
函数使用上的限制,它们的根元素只能有一个,因此如果想要在组件中有两个以上的元素时,要使用一个包装用元素包住多个元素才能使用。
举例来说,如果我们在刚刚例子的template
中增加一个<h1>
叫做yoyoyo:
template: '<h1>yoyoyo</h1><button v-on:click="count++">{{title}}你点了我 {{count}} 次─=≡Σ((( つ•̀ω•́)つ</button>'
结果页面上会只剩下yoyoyo,我们的按钮们就不见了:
这时候我们使用<div>
将两个组件包裹起来!按钮就可以正常渲染了欧(ノ◕ヮ◕)ノ*:・゚✧这样我们就可以在同一个模板内使用多个HTML标签的效果!
template: '<div><h1>yoyoyo</h1><button v-on:click="count++">{{title}}你点了我 {{count}} 次─=≡Σ((( つ•̀ω•́)つ</button></div>'
我竟然到第29天才学会怎麽把GIF放到贴文里面,真的是太没用ㄌ(。T ω T。)不过结束前还是有用到,也算可喜可贺✧*。٩(ˊᗜˋ*)و✧*。感谢已完赛的Zero皇教学( ゚∀゚) ノ♡
参考资料:
Vue.js Core 30天屠龙记(第20天): 组件基础
第12节 组件基础
<<: DAY25:Broadcast receiver之实作
>>: Day-29 Massive Storage Management
不知怎麽的 我昨天抢在报名截止日前报名了 但还是没有收到关於永丰API的任何资讯 这下还真不知道要怎...
前言 各位早安,书接上回我们完成了Visual Studio Code的设定,已经进行到可以正式写程...
小勘误: 前几天提到我们会把六大类都至少做过一题,但是 picoCTF 的 Misc 类 -- U...
前言 今天要来介绍两个蛮重要的观念:ConfigMap 以及 Secrets,通常在本机端练习可能比...
上回试过本机的csv档, 这回将csv档放上dropbox及google drive, 这个app可...