一.Vue的全局组件注册
Vue.component("组件名称",{})
<div id="app01"> <global-component></global-component> </div> <script src="./static/vue.min.js"></script> <script> Vue.component('global-component',{ template:`<div> <h3>{{ msg }}</h3> </div>`, data(){ return{ msg:'hello vue', } } }); new Vue({ el:'#app01', // template:'' })
二.局部组件注册
const app = new Vue({
el: "#app",
components: {
组件的名称: 组件的配置信息
}
})
let Header={ template:`<div id="d1"> <h1>{{ greeting }}</h1> </div>`, data(){ return {greeting:'hello world'} } }; let app={ template:`<div><app-header></app-header></div>`, components:{'app-header':Header} };
三.子组件的注册,及父子组件通讯
-- 在父组件中注册components
## 注意写组件标签
## 每个组件的template只识别一个作用域块
let son={ template:`<div><span>{{ fData }}</span></div>`, props:['fData'] }; let father={ template:`<div><my-son :fData="fatherdata"></my-son></div>`, data(){return{fatherdata:'alex'}}, components:{'my-son':son} }; new Vue({ el:'#app01', template:`<father></father>`, components:{father} })
四 子父组件通讯
let son={ template:`<div><button @click="sonclick">改变字体大小</button></div>`, methods:{ sonclick:function () { this.$emit('changesize',0.1) } } }; let father={ template:`<div> <span :style="{ fontSize:postFontSize + 'em' }">我是你爸爸</span> <my-son @changesize ="fatherclick"></my-son> </div>`, data(){return{postFontSize:1}}, components:{'my-son':son}, methods:{ fatherclick:function (value) { console.log(value); this.postFontSize += value; } } }
子组件通过$emit提交事件,父组件中的子组件绑定这个事件,监听这个事件用来触发自身的方法,会自动接收子组件的传值
五.非父子组件之间的通讯
声明中间调度器
-- 其中一个组件向中间调度器提交事件
-- 另一个组件监听中间调度器的事件
-- 注意this的问题
<script> let hanfei = new Vue(); let maweihua = { template: `<div> <h1>这是马伟华</h1> <button @click="my_click">点我向康抻说话</button> </div>`, methods: { my_click: function () { console.log("马") // 向康抻说话 // 向中间调度器提交事件 hanfei.$emit("maweihua_say", "晚上等我一起吃饭~~~") } } }; let kangchen = { template: `<div><h1>这是康抻</h1>{{say}}</div>`, data(){ return { say: "" } }, mounted(){ // 监听中间调度器中的方法 let that = this; hanfei.$on("maweihua_say", function (data) { console.log(data) that.say = data }) } }; const app = new Vue({ el: "#app", components: { maweihua: maweihua, kangchen: kangchen } }) </script>
六.插槽命名插槽
Vue.component('global-component',{ template:`<div class="box"><slot></slot></div>`, });
Vue.component('global-name',{ template:` <div class="box"> <slot name="lightcourses"></slot> <slot name="degreecourses"></slot> <slot name="home"></slot> </div>` });
七.mix
let mixs = { methods:{ show:function (name) { console.log(name+'comming'); }, hide:function (name) { console.log(name+'goout') } } }; let alex={ template:'#t1', mixins:[mixs] }; let wusir={ template:'#t2', mixins:[mixs] };