【问题标题】:Is is possible to bind a value to a Vue element in a function later?以后是否可以将值绑定到函数中的 Vue 元素?
【发布时间】:2018-04-24 18:43:44
【问题描述】:

我正在构建一个自动完成功能基本上,我不想像这样绑定元素:

v-model="input"

使用 v-model 或 v-bind 绑定元素,给我的输入元素一个空白值。

相反,我希望我的元素能够从数据库中获取旧值或值,如下面的代码所示。在页面从数据库加载所有这些数据后,我只想将元素的值绑定到名为“input”的变量。下面的代码效果很好,但我必须使用 document.getElementById 来用新值更新我的元素。

<div id="spvs" class="uk-form-controls">
     <input v-on:input="input = $event.target.value" v-on:keyup="getCompanies" name="company" id="company" class="uk-input {{$errors->has('company') ? ' uk-form-danger' : ''}}" placeholder="company name" 
            value="{{ old('company') || $errors->has('company')
                ? old('company') 
                : $property->getCompanyName()
            }}">

    <div v-if="spvs.length > 0" class="tm-autocomplete-box">
        <ul class="uk-list uk-list-striped tm-autocomplete-list">
            <li v-for="(spv, key) in spvs" @click="complete(key)"><span uk-icon="plus-circle" class="uk-margin-right"></span> @{{ spv.name }}</li>
        </ul>
    </div>
</div>

理想情况下,当用户单击自动完成项之一时,我会将元素值绑定到我的“输入”变量。它运行一个名为“完成”的函数。

methods:{
        complete: function(key){
            this.input = this.spvs[key].name;
            document.getElementById('company').value = this.input;
            this.spvs = '';
        },

所以这是我想用新绑定替换的行:

document.getElementById('company').value = this.input;

【问题讨论】:

  • Binding on the element with the v-model or v-bind, gives my input element a blank value. 我没有看到您的代码处理空白值。如果你不喜欢空白,你可以设置一个你喜欢的默认值。
  • @Sphinx 谢谢,但是默认值不起作用。我需要检测我的旧(数据)或我的数据库数据,这些数据是动态的,因为它从数据库或旧的(失败的)“发布”请求中提取。上面的代码可以完美运行,但是我只想在那一刻绑定元素,而不是'document.getElementById)。
  • 在这种情况下,好的做法是显示加载动画并在此期间停用输入元素。

标签: javascript laravel-5 vue.js


【解决方案1】:

因此,您希望您的 input 在组件加载时具有旧值,然后您想更新该值。您仍然可以使用 v-model,如下所示。

当组件加载时,输入会有你想要设置的旧值,你也可以更新这个值:

<div id="app">
  <input type="text" v-model="oldValue">
</div>

new Vue({
  el: "#app",
  data: {
    oldValue: 'value from Database'
  }
})

如果你想要另一种方式,那就是:

<div id="app">
  <input type="text" :value="oldValue" @input="changeValue">
  <hr>
  The value of input is: {{oldValue}}
</div>

new Vue({
  el: "#app",
  data: {
    oldValue: 'value from Database'
  },
  methods: {
    changeValue(newValue) {
      this.oldValue = newValue.target.value
    }
  }
})

See in action the first example

See in action the second example

【讨论】:

  • 感谢您的回复。 :) 不幸的是,我有类似你的建议。但是,这对我不起作用,我无法将旧的 PHP 数据传递给 JavaScript。我正在使用外部 JavaScript 文件(因为此代码需要在“添加”和“编辑”页面上运行),所以我试图使其尽可能可重用。以我的方式做事,我可以从数据库中获取旧值。我使用“v-model”的那一刻,我的旧数据或数据库数据丢失了。我希望仅在用户单击建议后才在我的脚本中进行绑定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
相关资源
最近更新 更多