javascript - 如何防止用户提交远程 api 中已存在的文本?

标签 javascript vuejs2

我正在创建一个 VueJS 应用程序,其中包含名为 divisions 的名称列表。用户可以提交部门的新名称,也可以更新部门名称。部门的名称从远程 api 接收,然后所做的任何编辑也通过 PUT 请求发送到 api。这很好用。

但是,问题是如何防止用户提交已经存在的部门名称?

我有一个包含如下 GET 请求的父组件(名为 Divisions.vue):

  methods: {
    async getAllDivisions() {
      try {
        this.divisions = (await ApiService.getAllDivisions()).data
      } catch (error) {
        console.error(error)
      }
    }
  },

下面是我在名为 DivisionEdit.vue 的文件中设置代码的方法

HTML 模板:

<form @submit.prevent="onSubmitUpdate">

    Division Name:
    <input type="text" v-model="division.division" />
    <button type="submit">
      Update Division
    </button>

</form>

脚本部分:


data() {
    return {
      division: {
        division: '',
        division_id: null
      },

methods: {
    onSubmitUpdate() {
    ApiService.updateDivision(this.division)
  }
}

我在 apiService.js 中有这样的 api 服务 代码:

 updateDivision(division) {
    return this.getApiClient().put('/Divisions', division)
  }

最佳答案

你已经在父组件中有了所有的划分,你可以将它作为一个 props 传递给子组件

而在onSubmitUpdate之前的子组件中,这里可以有两种方式

1) you can disable the update button by default, and have validation for the input division by adding @input event -> check division if already exist, if not enable the button

<form @submit.prevent="onSubmitUpdate">

    Division Name:
    <input type="text" v-model="division.division" @input="divisionExists" />
    <button type="submit" :disabled="btnDisable">
      Update Division
    </button>

</form>

In Script: 

props: {
  divisions: Object,
},
data() {
    return {
      division: {
        division: '',
        division_id: null
      },
      btnDisable: true,
   }
}
methods: {
    divisionExists() {
      if (this.divisions.map(x => x.division).includes(this.division.division)){
        this.btnDisable = true
      } else {
        this.btnDisable = false;
      }
    },
    onSubmitUpdate() {
    ApiService.updateDivision(this.division)
  }
}

2) You can dirrectly add a condition in the onSubmitUpdate method to check if the edit division is already exist it will not trigger update api

onSubmitUpdate() {
if (!this.divisions.map(x => x.division).includes(this.division.division)){
            ApiService.updateDivision(this.division)
         }
    }

关于javascript - 如何防止用户提交远程 api 中已存在的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58635770/

相关文章:

vue.js:nextTick如何保证数据变化后dom渲染完成?

javascript - 如何将节点列表中的 HREF 属性分配给常规数组?

javascript - 如何捕获 highcharts 标签中的悬停事件?

vue.js - Vuejs全局导入axios方法

javascript - 使用 v-if 时 Vue.js CSS 动画无法正常工作

javascript - 同一页面上的相同 Vue 组件两次重复组件 View

javascript - 在 v-for 列表项中显示和隐藏 div (Vue.js 2)

javascript - 如果选择每日(复选框),请取消选择所有其他复选框

javascript - 集合上的 jQuery 选择器

javascript - 路由器的 prop History.location 中的路径名不会更新