Vue:针对Vuex绑定的计算与数据()。

JL *_*ret 5 vue.js vuex

(注意:我并不是在问如何使用watch)。

我有此表单模板,并想将其绑定到一些变量,例如objectvalue3,在Vuex存储中跟踪的变量(注意:一页上可能存在不同的表单,所以props.formname告诉表单要在哪里查看)。

<template>
    <div>
    Tracking formname_:{{formname_}}:
        <form method="post" autocomplete="off">
            <input type="text" name="objectvalue3" :value="objectvalue3" />
            <input type="submit" class="btn btn-primary btn-success" value="Track" @click.prevent="write">        
        </form>
    </div>
</template>
....
props: {
    formname: {
        type: String,
        default: "main"
    }
},
Run Code Online (Sandbox Code Playgroud)

在跟踪它data确实没有工作-即形式没有更新-它只是不断的vuex被初始化为值:

data: function() {
    return {
        formname_: this.formname
        ,objectvalue3: this.$store.state.tracker[this.formname].objectvalue3
},
Run Code Online (Sandbox Code Playgroud)

但是使用computed作品。

computed: {
    objectvalue3: function() {
        return this.$store.state.tracker[this.formname].objectvalue3
    }
Run Code Online (Sandbox Code Playgroud)

我知道computed需要计算时必须使用。但是这里没有真正的计算。除非,是不是通过哈希查找this.formname告诉表单tracker要看哪个属性导致直线data失败?这是vuex特有的吗?

Phi*_*ter 7

尝试以下方法:

data: function() {
    return {
        formname_: this.formname,
        tracker: this.$store.state.tracker[this.formname]
},
Run Code Online (Sandbox Code Playgroud)

然后:

<input type="text" name="objectvalue3" :value="tracker.objectvalue3" />
Run Code Online (Sandbox Code Playgroud)

这应该起作用,因为数据的tracker对象指向存储中的那个,然后只要那里的值更改,它的tracker对象中的位置也会更改。

computed 之所以起作用,是因为它侦听其中使用的变量的更改,而数据则不行,因为它在执行时会应用第一个值,并且不会跟踪更改。

  • 是的,这是一个JavaScript的东西。如果执行var yourVar = Number / String,则不复制引用,而是传递值。但是,如果您执行`var yourVar = Object`,那么您会将引用传递给对象,而不是复制它。 (3认同)