其实这个部分应该是属于component,为什么把这玩意单独拿出来呢,原因是它这个东西比较涉及到了vue的事件,以及v-model指令的使用,还是比较综合的。所以就拿出来啦
父组件
<template> <div id="a"> //在子组件的com上使用v-model 在这里监听change1事件是为了更好的描述在子组件上使用v-model是,绑定的值的变化 <com1 v-model="test" @change1="change_even"></com1> </div> </template> <script> import com1 from "./b_router"; export default { name: "a_router", components: { com1 }, data() { return { test: "123" }; }, created() { }, methods:{ change_even(e){ console.log(e); } } }; </script>
子组件
<template>
<div id="b">
<h1>b_router</h1>
<input type="test" v-model="val"/> //在这里不能直接绑定使用checked 因为vue不允许在子组件中更改父组件中的变量值,这会引起其他使用父组件中变量的子组件,和父组件中使用变量的元素发生变化
</div>
</template>
<script>
export default {
name: "b_router",
data() {
return {
val:null
};
},
model: {//用model字段,而非props
prop: "checked",//定义在子组件中使用checked作为父组件通过v-model的变量test的别名
event: "change1"//定义在cheked值发生变化时,触发的事件,这一步是实现更改父组件中在子组件上v-model的变量test的值的关键
},
props:{//你仍需要在这里定义,子组件才能使用checked变量
checked:String
},
created(){
let vm=this;
console.log(this.checked)
},
watch:{
val(){//每次val值变化执行
this.$emit(‘change1‘,this.val)//触发change1事件并将第二个参数的值赋值给父组件中在子组件上v-model的test变量,同时当前组件的checked变量也会同步改变
}
}
};
</script>
<style scoped>
</style>
原文:https://www.cnblogs.com/wrhbk/p/11669099.html