我在VueJs中有点迷失,我尝试用组件和Vue更新的数据制作一个vue。
我了解如何使用$ emit更新父值。
如果有可能,某人可以打电话
Html代码
<div id="app2" v-cloak>
<p>{{labels.lbl1}}: {{values.value}}</p>
how direct set {{labels.lbl1}} here: <input type="text" v-model:value="values.value"> can set the child value?
<hr/>
<child2 v-model:value="values.value" v-bind:lbl="labels.lbl1"></child2>
</div>
<template id="child2">
<div>
Set {{internallbl1}} in child:
<input type="text" v-model="internalValue" >
<p>Value : {{value}}</p>
</div>
</template>
Js代码:
Vue.component('child2', {
template: '#child2',
//The child has a prop named 'value'. v-model will automatically bind to this prop
props: ['value','lbl'],
data: function() {
return {
internalValue: '',
internallbl1:''
}
},
watch: {
'internalValue': function() {
// When the internal value changes, we $emit an event. Because this event is
// named 'input', v-model will automatically update the parent value
this.$emit('input', this.internalValue);
}
},
created: function() {
// We initially sync the internalValue with the value passed in by the parent
this.internalValue = this.value;
this.internallbl1 = this.lbl;
}
});
new Vue({
el: '#app2',
data: {
labels : {lbl1:'Parent value 1'},
values : {value: 'hello'},
}
});
这是jsFiddle:https://jsfiddle.net/davidhequet/ag0thqar/5/
谢谢你, 大卫
答案 0 :(得分:1)
我的理解是,当父母的价值发生变化时,internalValue
不会改变。您可以在value
上设置一个观察者,每当它发生变化时,设置internalValue
,如下所示:
Vue.component('child2', {
template: '#child2',
...
...
...
created: function() {
// We initially sync the internalValue with the value passed in by the parent
this.internalValue = this.value;
this.internallbl1 = this.lbl;
},
watch: {
'internalValue': function() {
// When the internal value changes, we $emit an event. Because this event is
// named 'input', v-model will automatically update the parent value
this.$emit('input', this.internalValue);
},
value: function(newVal) {
this.internalValue = newVal
}
},
});
见工作fiddle。