我想用vuejs将数据从组件设置到另一个组件。这是我的代码:
http://quangtri.herokuapp.com/s/ByNN4FE-b
我哪里错了?请帮我!非常感谢你!
答案 0 :(得分:2)
您在function
中使用了bus.$on
,因此this
不是您认为的那样。改为使用箭头功能,它可以正常工作。
const bus = new Vue();
Vue.component('coupon', {
data() {
return {
name: 'tri'
}
},
template: `
<div>
<p>{{ name }}</p>
<button type="button" @click="batdau">Go</button>
</div>
`,
methods: {
batdau(name) {
this.name = 'Maria';
}
},
created() {
},
mounted() {
bus.$on('applied', (name) => {
alert(name);
this.name = 'Romeo';
})
}
});
Vue.component('couponmore', {
template: `
<button type="button" @click="nosukien">Let Set Name</button>
`,
methods: {
nosukien() {
bus.$emit('applied', 'John');
}
}
});
new Vue({
el: '#root',
data: {
couponApplied: false
}
});
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.3.3/vue.min.js"></script>
<div id="root">
<coupon></coupon>
<couponmore></couponmore>
</div>
&#13;
答案 1 :(得分:1)
那是因为在那段代码中,this
是窗口,而不是组件。
bus.$on('applied', function(name){
alert(name);
this.$data.name ='Romeo';
})
您还使用this.$data.name
设置数据,而不仅仅是this.name
,我不确定,但这可能会导致数据无效。
如果您使用的是ES6,则可以执行以下操作:
bus.$on('applied', (name) => {
alert(name);
this.name ='Romeo';
})
这称为箭头函数,当使用箭头函数而不是普通函数时,函数内部this
的值将与父作用域中的值相同(所以,包含data
)的组件实例。
如果您使用的是vanilla javascript,请在结尾处使用.bind(this)
:
bus.$on('applied', function (name) {
alert(name);
this.name ='Romeo';
}.bind(this))