【问题标题】:Using the new value of a dynamic vue input使用动态 vue 输入的新值
【发布时间】:2018-12-31 04:38:24
【问题描述】:

我正在检索对象的一个​​对象,对于每个对象,我都会制作一个文本输入列表来编辑它们的值。我的问题是输入的值没有改变所以它只提交起始值,我怎样才能使输入值动态?

<ul>
    <li v-for="variable in variables">
        <input type="text" :value="variable.value" />
        <button @click="updateVariable(variable.id, variable.value)">Update</button>
    </li>
</ul>

...

methods: {
    updateVariable(id, value) {
        axios.post('/destination', {
                params: {
                    id: id,
                    value: value
                }
            })
                .then((response) => {
                    console.log(response);
                })
                .catch((error) => {
                    console.log(error);
                })
    }
}

【问题讨论】:

    标签: vue.js


    【解决方案1】:

    你只是给每个输入一个初始值,但你没有将它绑定到任何反应数据属性。

    使用 v-model 指令来使用输入绑定并将 Vue 的反应性应用于输入:

    <ul>
        <li v-for="variable in variables">
            <input type="text" v-model="variable.value" />
            <button @click="updateVariable(variable.id, variable.value)">Update</button>
        </li>
    </ul>
    

    请注意variables 数组必须在组件的data object 中声明才能正常工作。

    【讨论】:

    • 效果很好...我认为 :value 只是 v-model 的简写,哈哈。谢谢。
    【解决方案2】:

    使用v-model:value 不会跟踪更改

    // Fake axios to debug with
    const axios = {
      post(ep = "", data) {
        console.log(`would send \n${JSON.stringify(data)}\nto ${ep}`);
        return Promise.resolve("OK");
      }
    };
    
    const app = new Vue({
      el: "#app",
      data() {
        return {
          variables: {
            foo: {
              id: "foo",
              value: "bar"
            },
            fizz: {
              id: "fizz",
              value: "buzz"
            }
          }
        };
      },
      methods: {
        updateVariable(id, value) {
          axios.post('/destination', {
              params: {
                id: id,
                value: value
              }
            })
            .then((response) => {
              console.log(response);
            })
            .catch((error) => {
              console.log(error);
            })
        }
      }
    });
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.min.js"></script>
    <div id="app">
      <ul>
        <li v-for="variable in variables">
          <input type="text" v-model="variable.value" />
          <button @click="updateVariable(variable.id, variable.value)">Update</button>
        </li>
      </ul>
    </div>

    【讨论】:

    • 效果很好...我认为 :value 只是 v-model 的简写,哈哈。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2021-10-15
    • 2018-09-17
    • 1970-01-01
    • 2021-04-07
    • 2022-11-22
    • 2020-08-14
    • 1970-01-01
    • 2019-09-08
    相关资源
    最近更新 更多