29. 组件:参数验证
知识点
- props:组件参数验证语法
组件的数据
为组件中接受到的变量进行逻辑验证。
综合例
<div id="myApp"> <h1>身世之谜</h1> <show-member-info name="koma" :age="25" :detail="{address:'earth', language:'世界语'}"></show-member-info> </div> <script> Vue.component('show-member-info', { props: { name: { type: String, required: true, }, age: { type: Number, validator: function (value) { return value >= 0 && value <= 130; } }, detail: { type: Object, default: function() { return { address: 'US', language: 'English', }; } }, }, template: '<div>姓名:{{this.name}}<br/>' + '年龄:{{this.age}}岁<br/>' + '地址:{{this.detail.address}}<br/>' + '语言:{{this.detail.language}} </div>', }); var myApp = new Vue({ el: '#myApp', }); </script>
30. 组件:事件传递
知识点
- v-on
- $emit
v-on
侦听组件事件,当组件触发事件后进行事件处理。
$emit
触发事件,并将数据提交给事件侦听者。
综合例
<div id="myApp"> <h1>人生加法</h1> <add-method :a="6" :b="12" v-on:add_event="getAddResult"></add-method> <hr/> <h3>{{result}}</h3> </div> <script> Vue.component('add-method', { props: ['a', 'b'], template: '<div><button v-on:click="add">加吧</button></div>', methods: { add: function(){ var value = 0; value = this.a + this.b; this.$emit('add_event', { result:value }); } }, }); var myApp = new Vue({ el: '#myApp', data: { result: 0 }, methods: { getAddResult: function(pval){ this.result = pval.result; } }, }); </script>
31. 组件:slot插槽
知识点
- slot
slot
slot是父组件与子组件的通讯方式,可以将父组件的内容显示在子组件当中。
综合例
<div id="myApp"> <say-to pname="koma"> 你的视频做的太差了。 </say-to> <say-to pname="mike"> 你千万不要学koma。 </say-to> <say-to pname="john"> 你教教他们两个吧。 </say-to> </div> <script> Vue.component('say-to', { props: ['pname'], template: '<div>' + '你好,<strong>{{pname}}</strong>!' + '<slot></slot>' + '</div>', }); var myApp = new Vue({ el: '#myApp', }); </script>
32. 组件:组合slot
知识点
- slot命名
slot命名
在子组件中通过为多个slot进行命名,来接受父组件的不同内容的数据。
综合例
<div id="myApp"> <nba-all-stars c="奥尼尔" pf="加内特"> <span slot="sf">皮尔斯</span> <span slot="sg">雷阿伦</span> <span slot="pg">隆多</span> </nba-all-stars> </div> <script> Vue.component('nba-all-stars', { props: ['c', 'pf'], template: '<div>' + '<div>中锋:{{c}}</div>' + '<div>大前:{{pf}}</div>' + '<div>小前:<slot name="sf"></slot></div>' + '<div>分卫:<slot name="sg"></slot></div>' + '<div>控卫:<slot name="pg"></slot></div>' + '</div>', }); var myApp = new Vue({ el: '#myApp', }); </script>