【问题标题】:Bootstrap <b-form-input> component does not change when computed properties were changed更改计算属性时,引导 <b-form-input> 组件不会更改
【发布时间】:2020-01-27 05:19:06
【问题描述】:

我在我的项目中使用 bootstrap-vue 表单组件。我使用计算属性从 vuex 获取数据到我的组件,然后我有在 vuex 存储中保存新数据的方法。当存储中的数据更新时,计算属性中的数据也会更新,但在我的表单中,我看到的是旧数据。 但是如果我使用&lt;input&gt; 标签而不是&lt;b-form-input&gt; 组件,&lt;input&gt; 中的数据会正常更新。如何更新&lt;b-form-input&gt; 中的数据?

<template>
<b-form @submit.prevent="saveWebintSet">
    <div class="form-row">
        <div class="col-lg-4 col-md-6 col-sm-12">
            <b-form-group
                label="Bind Port"
                label-for="bind-port"
                class="required">

                <b-form-input
                id="bind-port"
                v-model="web['bind-port']"
                v-input-mask v-bind:data-inputmask-regex="regExps.bindPort.pattern"
                type="text">
            </b-form-input>
            <div class="invalid-feedback"></div>
        </b-form-group>
    </div>
    <button type="submit" class="btn btn-primary mr-3">Save</button>
</b-form>
</template>

<script>
    export default {
        computed: {
            web: {
                get() {
                    return  this.$store.getters.GET_WEBINTF_SETTINGS;
                }
            },
         },
         methods: {
            saveWebintSet() {
                this.$store.dispatch('SAVE_WEBINTF_SETTINGS', this.web)
            },
        },
     }
</script>

【问题讨论】:

    标签: vue.js vuex bootstrap-vue


    【解决方案1】:

    计算属性是单向的,不应用作 v-model(除非您使用显式 getset 方法定义它们):https://vuejs.org/v2/guide/computed.html#Computed-Setter

    您最好为 v-model 使用数据属性(变量),并使用您的商店获取的结果预先填充它,然后在提交时将商店值设置为数据属性(变量)

    【讨论】:

    • 更具体(与vuex相关)见vuex的文档:vuex.vuejs.org/guide/forms.html#two-way-computed-property
    • 感谢@Troy,但我只需要一种方式,因为我使用我的方法saveWebintSet() 将数据保存在商店中。当我在存储中保存数据时,我的计算属性会更新(我在 Chrome 的 vue devtools 中看到了这一点),但我看到的是旧数据的形式。我认为引导表单组件的问题是因为当我使用 html-tags &lt;input&gt;&lt;select&gt; 等时,表单中的值会正确更新。
    • b-form-input / b-form-select 是组件,其工作方式与原生输入/选择不同。
    • 我使用双向计算属性方法让 BootstrapVue 输入与 Vuex 一起工作。详情见my post
    猜你喜欢
    • 1970-01-01
    • 2019-11-09
    • 2019-05-18
    • 1970-01-01
    • 2019-06-06
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    相关资源
    最近更新 更多