vue.js - 如何区分 onChange 方法与首次从 nuxt 服务加载数据

标签 vue.js vuejs2 nuxt.js

我在处理 VueJs select 上的 onChange 事件时遇到问题,

以下是我的逻辑:

我正在使用国家/地区下拉列表,如果选择了加拿大国家/地区,我想使用省份下拉列表,否则我将使用输入字段供用户添加下拉值。

当用户选择国家/地区下拉列表时,我想清除输入字段或下拉列表中的值。

问题:它在正常情况下工作正常,但是当我从服务获取数据并且如果国家/地区不是加拿大时,由于我在国家/地区下拉列表中编写的 onChange 函数,数据会被清除。

如何在不添加新字段的情况下分离此逻辑?我可以在这里使用任何生命周期 Hook 吗?

const eventBus = new Vue ()



Vue.component('ChildA',{
  template:`
    <div id="child-a">
  <select name="country" v-on:change="onChange($event)" class="form-control" v-model="val.contry">
    <option value="CA">Canada</option>
    <option value="Other">Other</option>
  </select>
  <select v-if="val.country == 'CA'" name="province"  class="form-control" v-model="val.province">
    <option value="ON">ON</option>
    <option value="PN">PN</option>
  </select>
  <div v-else>
    <input v-model="val.province">
  </div>
</div>`,
  props: ["val"],
  methods: {
    onChange(e) {
    console.log("called")
      
      if (this.val.country == 'CA'){
        //logics
      } else {
        this.val.province = '';
      }
    }
  }
})

Vue.component('ParentA',{
  template:`
    <div id="parent-a">
      <child-a :val="val"/>
    </div>`,
  data() {
    return {
     val: {
        country: "",
        province: ""
      }
    }
  },
created() {
     setTimeout(() => {
          this.val = {country: "Other",
        province: "test"};
      }, 1000);
  },
})


new Vue ({
    el: '#app',
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  <parent-a/>
</div>

最佳答案

如果我理解正确的话,也许类似于以下代码片段:

new Vue({
  el: "#demo",
  data() {
    return {
      key: {
        country: "Other",
        province: "test"
      }
    }
  },
  methods: {
    onChange(e) {
      this.key.country = e.target.value
      if (e.target.value == 'CA'){
        //logics
      } else {
        this.key.province = '';
      }
    }
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="demo">
  <select name="country" v-on:change="onChange($event)" class="form-control" v-model="key.contry">
    <option value="CA">Canada</option>
    <option value="Other">Other</option>
  </select>
  <select v-if="key.country == 'CA'" name="province"  class="form-control" v-model="key.province">
    <option value="ON">ON</option>
    <option value="PN">PN</option>
  </select>
  <div v-else>
    <input v-model="key.province">
  </div>
</div>

关于vue.js - 如何区分 onChange 方法与首次从 nuxt 服务加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71914095/

相关文章:

javascript - 在 v-for 循环中调用不同的 onClick 函数

nginx - 如何使用 nginx 和 plesk 将所有请求代理到 localhost?

html - 在 HTML block 中显示在 v-model 中输入的 URL

javascript - 当 vue-router 重新打开页面时,不会调用 VueJS hook mounted()

javascript - 如何在 v-text 中使用条件运算符作为 Vue.Js 组件?

javascript - VueJS : Reset/Clear value from input

javascript - 迁移到 TypeScript 后 Jest 测试无法正常工作

javascript - Vuetify v-autocomplete v-for 内的 onchange 事件

javascript - 使用方法更改数据后的 Vue v-show 更新

javascript - Vue.js:如何连接 v-model 值