gpt4 book ai didi

javascript - 一个组件中的 v-model 干扰另一组件的 v-model

转载 作者:行者123 更新时间:2023-12-03 02:17:08 25 4
gpt4 key购买 nike

我正在使用 vue js 和 buefy,并且我有两个组件。即一个 field-radiobox 组件和一个 field-textarea 组件。

在我的 post.cshtml 页面中,我可以从单选按钮中进行选择,并且所选值会适本地显示在组件下方的输入框中。

但是,当我从 field-textbox 组件编辑文本框中的某些内容时,我之前从 field-radiobox 组件按钮中进行的选择将被完全删除,并且单选按钮下方的输入框也不再显示任何内容,这意味着当我在文本框中键入内容时,该组件中的 v 模型已重置或受到干扰。

但这似乎只发生在文本框标记中。如果我尝试使用输入元素而不是文本框,则问题似乎不会发生。

为什么一个组件的 v-model 会干扰另一组件的 v-model?

post.cshtml

<div>
<form data-toggle="formcache" class="form rounded justify-content-center" id="form" asp-route-returnUrl="@ViewData["ReturnUrl"]" method="post" v-cloak>
<div asp-validation-summary="All" class="text-danger"></div>

<!--Select Advert type-->
<field-radiobox
asp-property="TypeId"
title="I want to"
:options="advertTypes"
value-key="id"
label-key="name"></field-radiobox>

<!--TERMS-->
<field-textarea asp-property="Terms" title="Terms"></field-textarea>
</form>
</div>
<script>
var vm = new Vue({
el: '#form',
data:
{
loaded: false,
advertTypes: @Html.Raw(Json.Serialize(Model.AdvertTypes))
}
});
</script>

field-radiobox.vue

<template>
<!-- https://buefy.github.io/#/documentation/dropdown -->
<div>
<b-field :label="title" horizontal>
<b-radio-button v-model="selectedValue"
v-for="option in options"
:native-value="getValue(option)" expanded>
{{ getLabel(option) }}
</b-radio-button>
</b-field>
<input :asp-for="aspProperty" v-model="selectedValue"/>
</div>
</template>

<script>
export default {
name: "field-radiobox",
data: function() {
return {
selectedValue: this.selectedValue
}
},
props: {
title: {
type: String,
required: true
},
options:{
type:Array,
required:true
},
valueKey:{
type:String,
required:true
},
labelKey:{
type:String,
required:true
},
selectedValue: {
required:false
},
aspProperty:{
type:String,
required:false
}
},
methods: {
getLabel(obj) {
//return this.labelKey;
return !this.labelKey ? obj : obj[this.labelKey]
},
getValue(obj) {
return !this.valueKey ? obj : obj[this.valueKey]
}
}
}
</script>

field-text.vue

<template>
<!-- https://buefy.github.io/#/documentation/dropdown -->
<div>
<b-field :label="title" horizontal>
<textarea :class="inputClass" :readonly="readOnly"
:placeholder="placeholder" v-model="inputValue"></textarea>
</b-field>
<input :asp-for="aspProperty" v-model="inputValue"/>
</div>
</template>

<script>
export default {
name: "field-textarea",
data: function () {
return {
inputValue: this.inputValue
}
},
props: {
title: {
type: String,
required: true
},
inputClass: {
type: String,
required: false,
default: "textarea"
},
placeholder: {
type: String,
required: false
},
readOnly: {
type: Boolean,
required: false,
default: false
},
inputValue: {
type: String,
required: false,
default: ""
},
aspProperty:{
type:String,
required:false
}
},
methods: {
getLabel(obj) {
//return this.labelKey;
return !this.labelKey ? obj : obj[this.labelKey]
},
getValue(obj) {
return !this.valueKey ? obj : obj[this.valueKey]
}
}
}
</script>

<style scoped>

</style>

最佳答案

您将 data 项命名为与 prop 项相同。当它们晋升为实例顶部项目时,prop 可见。绑定(bind) $data.inputValue 或(更好)不要将它们命名为相同的东西。

(我认为您会收到有关修改 Prop 的警告。)

关于javascript - 一个组件中的 v-model 干扰另一组件的 v-model,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49326165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com