代码如下;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="./node_modules/jquery/dist/jquery.js"></script>
<script src="./node_modules/vue/dist/vue.js"></script>
</head>
<body>
<button @click="changegroup">改变group子组件</button>
<groupcomponent :groupmessage="group"></groupcomponent>
<todocomponent :todomessage="todolist"></todocomponent>
<template id="group_co">
<div @click="groupidclick">{{groupmessage.id}}</div>
<div>{{groupmessage.name}}</div>
<div>{{tag}}</div>
</template>
<template id="todo_template">
<ul>
<li v-for="todo in todomessage">
<span>ID: {{todo.id}}, </span>
<span>Title{{todo.title}}</span>
</li>
</ul>
</template>
<script>
var groupcomponent = Vue.extend({
template: '#group_co',
props: ['groupmessage'],
data: function () {
return {
'tag': 'intresting'
}
},
methods: {
groupidclick: function () {
console.log('group id click.');
console.log(this.groupmessage);
this.groupmessage.name = 'click';
}
}
});
Vue.component('groupcomponent', groupcomponent);
var todocomponent = Vue.extend({
template: '#todo_template',
props: ['todomessage']
});
Vue.component('todocomponent', todocomponent);
vml = new Vue({
el: 'body',
data: {
group: {
id: 12,
name: 'default'
},
todolist: [
{
id: 1,
title: 'todo 1'
},
{
id: 2,
title: 'todo 2'
}
]
},
methods: {
changegroup: function () {
this.group.id = '2';
this.group.name = 'changed';
}
}
})
</script>
</body>
</html>
页面效果如下:
文档如下:
我在组件groupcomponent中的groupidclick
函数中修改了name
的值为click
,但是文档中说值是单向绑定的,也就是父组件中值的变换能够传到子组件,但是子组件的值变换了传不到父组件,可以当我点击groupcomponent
组件中的id的时候,groupmessage.name
却发生了改变,是我哪里理解错了么?
文档中所说的属性变化,应该指的是如果我在子组件中为group
添加一个属性叫做user
,这个时候在父组件中是获取不到这个user
属性的,如果在父组件中增加group
的属性叫做user
那么在子组件中是可以读取这个属性的值的.
我的理解对么?
Update on 2016-10-17 19:50
文档的下面还有一句话:
对于对象跟数组是按引用传递,所以在子组件中修改了对象或数组中的属性会同步到父组件中.
链接描述这个东西在2.0版本以上已经移除了,以后只能单向传递。
参考地址:vue官网.once .sync移除说明