先来看一个简单的实例:
html
<div id="component">
<my-component></my-component>
</div>
js
创建模板
var MyComponent = Vue.extend({
template: '<div>A good idea!</div>'
});
//注册一下 就是申明 绑定一下
Vue.component('my-component',MyComponent);
//创建实例 就是绑定到父级 div#component
new Vue({
el: '#component'
});
接着看 内部注册一个模板: 内部模板只能使用在父级的模板内(即:template 的字符串中) 下面代码 ****** 标注html
<div id="ex000">
<my-component msg="hello"></my-component>
</div>
js
//局部注册
var show = Vue.extend({
template: '<div>sssssssssssssssssssssssssssssssssss</div>'
});
//全局注册
//定义
var showss = Vue.extend({
//模板
template: '<div>{{ msg }} {{ privateMsg }} <show-s></show-s></div>', // ******
//参数
//props: {
// msg: ''
//},
props: ['msg'],
//数据
data: function () {
return {
privateMsg: '2222222222222'
}
},
//内部的模板 使用components 进行扩展及调用
components: {
//连接内部模板 调用局部模板:show
'show-s': show
}
});
//注册
Vue.component('my-component', showss);
//创建实例
var ex000 = new Vue({
el: '#ex000'
});
效果:

再来看看 父级与子级间的通讯
html
<div id="demo-2">
<input v-model="parentMsg">
<br>
<child v-bind:my-message="parentMsg"></child>
</div>
js
var child = Vue.extend({
props: ['myMessage'],
template: '<span>{{myMessage}}</span>'
});
new Vue({
el: '#demo-2',
data: {
parentMsg: 'Message from parent'
},
components: {
//不带引号('child')则是注册的是子级 可以在页面直接使用 带引号则是内部注册 只能在内部的template中使用
child: child
}
});
//components还可以这么写
components: {
child: {
props: { // or props: ['myMessage']
'myMessage': ''
}
template: '<span>{{ myMessage }}</span>'
}
}
效果:
自定义 :
html
<!-- 子组件模板 -->
<template id="child-template">
<input v-model="msg">
<button v-on:click="notify">Dispatch Event</button>
</template>
<!-- 父组件模板 -->
<div id="events-example">
<p>Messages: {{ messages | json }}</p>
<child></child>
// <child v-on:child-msg="handleIt"></child>
</div>
js
// 注册子组件
// 将当前消息派发出去
Vue.component('child', {
template: '#child-template',
data: function () {
return { msg: 'hello' }
},
methods: {
notify: function () {
if (this.msg.trim()) {
this.$dispatch('child-msg', this.msg); // 触发child-msg事件
this.msg = '';
}
}
}
});
// 启动父组件
// 将收到消息时将事件推入一个数组
var parent = new Vue({
el: '#events-example',
data: {
messages: []
},
// 在创建实例时 `events` 选项简单地调用 `$on`
events: {
'child-msg': function (msg) { // 监听到 child-msg事件
// 事件回调内的 `this` 自动绑定到注册它的实例上
this.messages.push(msg); // messages改变自动修改html内容
}
}
});
效果:

1842

被折叠的 条评论
为什么被折叠?



