【问题标题】:Setting Vue input value from method JS从方法 JS 设置 Vue 输入值
【发布时间】:2017-04-12 18:33:21
【问题描述】:

我在我的 Vue 方法中通过 JS 设置输入的值。它似乎可以工作。但是一旦我去保存它,它只会保存我在方法中设置值之前输入的内容。例如:我输入new yor 并从触发方法的选项中选择“纽约”并使用该地点的地点ID 更新值。但是当我保存数据(提交按钮)并在数据库中检查它时,它显示new yor。它没有保存更新的值。我知道我可以使用@click、@change 等...但不确定这是否是最好的设置。如何更改我的代码以允许 Vue 获取更新的值?

methods: {
      autocomp() {
          const searchInput = document.getElementById('searchTextField');
          const autocomplete = new google.maps.places.Autocomplete(searchInput);
          autocomplete.addListener('place_changed', function(){
            var place = autocomplete.getPlace();
            searchInput.value = place.place_id
          })
        },

HTML

  <div class="input-group">
    <input v-model="newPost.businessid" @keyup="autocomp" type="text" placeholder="Business ID" class="form-control" id="searchTextField">
  </div>

【问题讨论】:

    标签: javascript vue.js vuejs2


    【解决方案1】:

    首先,

    替换

    searchInput.value = place.place_id
    

    that.newPost.businessid = place.place_id
    

    Vue 使用双向数据绑定,因此变量的值与输入值直接相关。

    编辑:

    您必须保存对 Vue 对象的引用,因为它无法从侦听器方法访问为 this

    autocomp() {
          const searchInput = document.getElementById('searchTextField');
          const autocomplete = new google.maps.places.Autocomplete(searchInput);
        var that = this;
          autocomplete.addListener('place_changed', function(){
            var place = autocomplete.getPlace();
            that.newPost.businessid = place.place_id
          })
        },
    

    【讨论】:

    • 我相信你的权利,但是当我这样做的时候。输入值没有改变:/
    • 另外,你确定应该在每个 keyup 事件上调用 Autocomp 方法吗?
    • 那个编辑工作得很好,谢谢!我是 Vue 事件的新手。 @keyup 是唯一一个似乎有效的方法。 @change 这样的东西会更好吗?
    • 不,我的意思只是在初始化阶段调用 autocomp,因为它基本上是为 Google Maps API 执行初始化并设置一个事件监听器,这些任务只能执行一次
    • 可能在组件的mounted()函数中
    猜你喜欢
    • 2014-08-06
    • 2019-01-06
    • 2021-09-13
    • 2021-04-07
    • 2021-06-01
    • 2019-08-24
    • 2019-02-11
    • 2020-01-23
    • 1970-01-01
    相关资源
    最近更新 更多