如何在Vue2中实现组件props双向绑定
发布网友
发布时间:2022-04-22 06:50
我来回答
共1个回答
热心网友
时间:2022-04-22 11:43
1. 在组件内的data对象中创建一个props属性的副本
因为result不可写,所以需要在data中创建一个副本myResult变量,初始值为props属性result的值,同时在组件内所有需要调用props的地方调用这个data对象myResult。
Vue.component("switchbtn", {
template: "<div @click='change'>{{myResult?'开':'关'}}</div>",
props: ["result"],
data: function () {
return {
myResult: this.result//data中新增字段
};
},
......
});
2. 创建针对props属性的watch来同步组件外对props的修改
此时在组件外(父组件)修改了组件的props,会同步到组件内对应的props上,但是不会同步到你刚刚在data对象中创建的那个副本上,所以需要再创建一个针对props属性result的watch(监听),当props修改后对应data中的副本myResult也要同步数据。
Vue.component("switchbtn", {
template: "<div @click='change'>{{myResult?'开':'关'}}</div>",
props: ["result"],
data: function () {
return {
myResult: this.result
};
},
watch: {
result(val) {
this.myResult = val;//新增result的watch,监听变更并同步到myResult上
}
},
......
3. 创建针对props副本的watch,通知到组件外
此时在组件内修改了props的副本myResult,组件外不知道组件内的props状态,所以需要再创建一个针对props副本myResult,即对应data属性的watch。
在组件内向外层(父组件)发送通知,通知组件内属性变更,然后由外层(父组件)自己来变更他的数据
最终全部代码:
<div id="app">
<switchbtn :result="result" @on-result-change="onResultChange"></switchbtn>
<input type="button" value="change" @click="change">
</div>
Vue.component("switchbtn", {
template: "<div @click='change'>{{myResult?'开':'关'}}</div>",
props: ["result"],
data: function () {
return {
myResult: this.result//①创建props属性result的副本--myResult
};
},
watch: {
result(val) {
this.myResult = val;//②监听外部对props属性result的变更,并同步到组件内的data属性myResult中
},
myResult(val){
//xxcanghai 小小
this.$emit("on-result-change",val);//③组件内对myResult变更后向外部发送事件通知
}
},
methods: {
change() {
this.myResult = !this.myResult;
}
}
});
new Vue({
el: "#app",
data: {
result: true
},
methods: {
change() {
this.result = !this.result;
},
onResultChange(val){
this.result=val;//④外层调用组件方注册变更方法,将组件内的数据变更,同步到组件外的数据状态中
}
}
});
至此,实现了组件内数据与组件外的数据的双向绑定,组件内外数据的同步。最后归结为一句话就是:组件内部自己变了告诉外部,外部决定要不要变。
如何在Vue2中实现组件props双向绑定
1. 在组件内的data对象中创建一个props属性的副本 因为result不可写,所以需要在data中创建一个副本myResult变量,初始值为props属性result的值,同时在组件内所有需要调用props的地方调用这个data对象myResult。Vue.component("switchbtn", { template: "{{myResult?'开':'关'}}",props: ["result"]...
如何在 Vue2 中实现组件 props 双向绑定
从父组件传入 v-model 子组件通过 value 接收参数 子组件通过 this.$emit('input', newValue) 同步 v-model 的值
vue2.0中的render函数怎么实现双向数据绑定
一,先创建一个叫eventbus的vue对象,什么配置都不需要,就只是拿来做一个event bus而已。第二,因为组件的props不允许更改,所以呢要用另一个变量来作为中转,也就是呢,组件不能用functional为true了。然后组件里头定义了个currentValue,绑定在props定义的value,这样:data: function() { return {...
vue 自定义组件使用v-model
v-model 是 Vue2 中唯一支持双向绑定的指令,用于表单控件绑定,但不代表它只能用在表单控件之上。在文档 使用自定义事件的表单输入组件 一节中提到了, v-model 其实是个语法糖。这不过是以下示例的语法糖:也就是说,你只需要在组件中声明一个name为value的props,并且通过触发input事件传入一个...
Vue组件的使用之props
动态绑定props值的灵活性在于,你可以使用v-bind属性来动态设置props的值。同时,注意props的命名规范,如驼峰命名法,其大小写形式需要匹配,这样在开发过程中,Vue会通过告警机制帮助你发现和纠正可能的错误。最后,详细定义props的好处是显而易见的,它不仅清晰地展示了组件的接口,便于他人理解使用,而且...
如何操作vue组件使用props传递数据
1.1字符串数组: <my-component4 message="数据来自父组件"></my-component4> Vue.component('my-component4',{ props: ['message'], template: '{{message}}'});var app4 = new Vue({ el: '#app4'});渲染后的结果为:props 中声明的数据与组件data 函数return 的数据主要区别就是pr...
vue使用props在组件中传输和接收参数
1、在组件中使用props选项定义数据,接收参数;2、在路由中,使用props选项来进行设置,路由中的props有三种模式:a、布尔模式:props设置为true,可接收params方式的参数传递;{ path:"bjc/:name/:price",//定义其属性 component:Bjc,props:true },接收参数:props: { keyword: { type: String,defaul...
vue2.0组件之间通信(父子、子父、平级)
在Vue 2.0中,组件间通信是构建动态和交互性强的应用的关键。通信方式主要包括父传子、子传父以及兄弟组件间的传递。当不使用Vuex时,我们可以利用Vue的内置特性实现这些通信。在实现父子组件通信时,首先需要在子组件中定义一个接收属性,例如通过在props中创建一个名为message的属性。接着,在父组件中...
Vue组件的props配置,让组件能够接收外部传入数据
接下来,我将通过一个School组件的实例来具体展示如何实现这一需求。School.vue 在List组件中,我们不能将数据定义死,而是应该将其定义在props参数中。List组件在这里可以看作是一个“抽象基类”,我们可以继续继承它的模板,但不要将数据写死。因此,我们尽量将用到的数据全部放在props中。如果我们需要...
vuecomponent动态组件传值?
vue父组件向子组件传值props子组件改变父组件的值emit1、父组件向子组件传值,可以通过绑定属性传值;子组件通过props接收父组件传值。父组件:子组件:子组件通过$emit触发一个自定义事件,将更新的数据传给父组件。2、vue的组件间传值可分为以下几种情况:父子组件间的传值:通过props传值。父组件...