概念:template是入口组件,那么挂载在template下的组件是入口组件的子组件vue
三步口诀:声子,挂子,用子后端
Vue.component(name,options)
第一个参数是组件的名称
第二个参数是组件的对象
注意全局组件要在建立Vue实例化对象前,不然会报错app
// 全局组件(要在建立Vue实例以前) Vue.component('Vbtn', { template: `<button>全局按钮组件</button>` }) // 一、建立一个入口组件 // 二、建立头部组件,侧边栏组件和内容组件 var Heard = { template: ` <div> <h2>我是头部组件</h2> <Vbtn></Vbtn> </div> ` } var Aside = { template: ` <div>我是侧边栏组件</div> ` } var Content = { template: ` <div>我是内容组件</div> ` } var App = { template: ` <div class="main"> <Heard class = "heaed"></Heard> <div class="main2"> <Aside class="aside"></Aside> <Content class="content"/> </div> </div> `, components: { Heard, Aside, Content } } new Vue({ el: "#app", data() { return { msg: "这是测试" } }, template: ` <App></App> `, components: { App } });
问:为何要经过父亲获取数据,在传递到子组件呢?
答:经过父亲向后端获取数据,而后在分发到各组件能够减小后端的交互,否则各个组件都向后端发送请求影响性能
见下图:ide
一、父用子时经过绑定自定义属性传递,
二、子要声明props:['属性']接收父绑定的自定义属性
三、收到就是本身的随便用函数
小补充:绑定自定义属性时:常量传递直接用,变量传递加冒号性能
父用子:先声子、挂子、用子
父传子:父传子(属性)、子声明(接收)、子使用测试
一、父用子绑定自定义事件
二、子触发自定义事件:this.$emit()this
第一个参数是**自定义事件名** 第二个参数是**传递进去的值** 
缘由:若是不使用slot没法修改全局组件的内容
做用:slot元素做为承载分发内容的出口spa
自定义属性传递常量直接使用不须要加冒号
若是要触发原生的事件须要经过 @原生事件名.native调用3d
在子组件中声明使用vue的内置组件:
<slot name = "one"></slot>
父组件中调用
<h2 slot= "one"></h2>
这样作的目的:能够一条数据一个坑,数据不会乱了
一、做用:对当前数据添油加醋
二、语法:声明在组件内使用filters对象,返回一个函数,函数必定要有返回值
三、调用:template中调用过滤器:数据属性|过滤器名字
var Content = { template: ` <div> <input type = number v-model = "msg"/> <h2>{{msg|RmbData}}</h2> </div> `, data(){ return{ msg:10 } }, filters:{ RmbData(value){ return '$'+value } } }