内容简介:示例代码请访问我的GitHub:该节教程代码可通过npm start运行devServer,在http://localhost:8080/查看效果示例代码:/lesson15/src/cmp1.js
示例代码请访问我的GitHub: github.com/chencl1986/…
该节教程代码可通过npm start运行devServer,在http://localhost:8080/查看效果
注册Vue组件
示例代码:/lesson15/src/cmp1.js
通过Vue.component可以注册一个组件,再将其导出到入口vm.js即可。
import Vue from 'vue/dist/vue.esm'; // 通过Vue.component注册一个组件 export default Vue.component('cmp1', { props: ['name', 'age', 'list'], // 定义要传入的props,在Vue中只有已定义的props才可以被组件接收到 data(){ // 组件的data必须是函数,为了保证组件的data作用域独立 return {a: 77, b: 55}; }, // 组件模板 template: ` <div> 姓名:{{name}}<br/> 年龄:{{age}}<br/> <ul> <li v-for="item in list">{{item}}</li> </ul> </div> ` }); 复制代码
使用组件
示例代码:/lesson15/src/vm.js
可以直接通过<cmp1 name="Lee Chen" age="18" :list="[1, 2, 3]" />使用组件,这样无论何种情况,组件都会直接被渲染在页面中。
也可以通过通用组件<component :is="type" name="Lee Chen" age="18" :list="[1, 2, 3]" />使用,is属性为需要使用的组件名,通过改变该属性的值,可以控制渲染的组件。
import Vue from 'vue/dist/vue.esm'; import Cmp1 from './cmp1'; let vm=new Vue({ el: '#div1', data: { type: 'cmp1' }, // 局部组件 // 组件可以直接引入,也可以通过通用component组件引入,当is属性为特定组件名时,渲染相应组件。 template: ` <div> 可以尝试输入cmp1或my-dialog <input type="text" v-model="type" /> <cmp1 name="Lee Chen" age="18" :list="[1, 2, 3]" /> <component :is="type" name="Lee Chen" age="18" :list="[1, 2, 3]" /> </div> ` }) 复制代码
实例化组件
组件还可以通过new关键字进行实例化,实例化后的组件主要用于测试。
// 实例化组件,主要用于测试 let cmp=new Cmp1({ propsData: { name: '张三', list: [88, 99, 27] } }); // 生成虚拟vm对象 let vm=cmp.$mount(); // vm.$el中存储了DOM,但不渲染在页面中 console.log(vm.$el); // 测试代码 if(vm.$el.querySelector('li').innerHTML=='88'){ console.log('正确'); }else{ console.log('失败'); } 复制代码
组件插槽
我们可以在模板中使用<slot />标记一个默认插槽位置,使用<slot name="title"/>标记一个具名插槽位置。
在使用组件时,组件标签<my-dialog></my-dialog>内部的内容都为插槽内容。其中带有相应name属性的内容会被插入到<slot name="title"/>插槽的位置,其余内容会插入到默认插槽。
示例代码:/lesson15/src/my-dialog.js
import Vue from 'vue/dist/vue.esm'; import 'bootstrap/dist/css/bootstrap.css'; import './css/my-dialog.css'; export default Vue.component('my-dialog', { data(){ return {}; }, template: ` <div class="panel panel-default my-dialog"> <div class="panel-heading"> <slot name="title"/> </div> <div class="panel-body"> <slot /> </div> </div> ` }); 复制代码
示例代码:/lesson15/src/vm.js
import Vue from 'vue/dist/vue.esm'; import Cmp1 from './cmp1'; import MyDialog from './my-dialog'; let vm=new Vue({ el: '#div1', data: { type: 'cmp1' }, // 局部组件 // 组件可以直接引入,也可以通过通用component组件引入,当is属性为特定组件名时,渲染相应组件。 template: ` <div> 可以尝试输入cmp1或my-dialog <input type="text" v-model="type" /> <cmp1 name="Lee Chen" age="18" :list="[1, 2, 3]" /> <component :is="type" name="Lee Chen" age="18" :list="[1, 2, 3]" /> <my-dialog> <!-- 名为title的插槽内容 --> <template slot="title">标题</template> 一些文字文字文字 <!-- 默认插槽内容 --> <ul> <li>asdfas</li> <li>asdfas</li> </ul> </my-dialog> </div> ` }) 复制代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- ReactNative入门教程-组件生命周期函数
- atom-design(Vue.js移动端组件库)手势组件使用教程
- Angular 4 依赖注入教程之二 组件中注入服务
- Spring Security教程 Vol 8. AccessDecisionVoter组件介绍
- Spring Security教程 Vol 9. AccessDecisionManager组件介绍
- Spring Security小教程 Vol 5.核心组件AuthenticationManager专题
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。