javascript - 如何重构重复的条件 Vue.js 代码?

标签 javascript vue.js vuejs2 refactoring vuex

我的 Vue.js 组件中有这段代码:

mounted() {
    if (localStorage.dobDate) {
      this.form.dobDate = localStorage.dobDate;
    }

    if (localStorage.dobMonth) {
      this.form.dobMonth = localStorage.dobMonth;
    }

    if (localStorage.dobYear) {
      this.form.dobYear = localStorage.dobYear;
    }
  },

  watch: {
    "form.dobDate": {
      handler: function(after, before) {
        localStorage.dobDate = after;
      },
      deep: true
    },
    "form.dobMonth": {
      handler: function(after, before) {
        localStorage.dobMonth = after;
      },
      deep: true
    },
    "form.dobYear": {
      handler: function(after, before) {
        localStorage.dobYear = after;
      },
      deep: true
    }

问你会发现它会变得非常重复,例如,如果我有一个大表格,我不想对每个字段都这样做。有什么方法可以使它更干吗?例如,有没有一种方法可以使表单中的任何字段更具动态性?

最佳答案

在挂载的钩子(Hook)中创建一个 localStorage 字段数组 ["dobDate","dobMonth","dobYear"] 并使用 forEach 方法遍历它,对于每个字段 localStorage[fieldName ] 检查它是否使用 conditional operator 定义,如果已定义,则将其分配给 form 数据属性中的相应字段名称,否则传递给下一个元素:

mounted(){
["dobDate","dobMonth","dobYear"].forEach(field=>{

localStorage[field]?this.form[field]=localStorage[field]:{};

})

}

watch 属性中深入观察 form 对象(观察它的嵌套字段),然后通过执行在 mounted 钩子(Hook)中进行的相互操作循环遍历它的键:

 watch: {
    form: {
      handler: function(after, before) {
        Object.keys(after).forEach(key=>{
          localStorage[key]=after[key]
       })
      },
      deep: true
    }
   }

关于javascript - 如何重构重复的条件 Vue.js 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57709947/

相关文章:

Javascript,在对象文字中传递一个函数,它是可调用的吗?

javascript - Polymer - 将事件绑定(bind)到动态创建的元素

vue.js - 如何在vue组件上传的图片上显示图片?

vue.js - 从路由导航时如何在vue中调用函数?

javascript - Vue.js 中 'data:' 、 'data: ()' 和 'data()' 之间有什么区别

javascript - vue.js 中的 Angular ng-container 等价物

javascript - 如何在 Quasar 版本 ^0.14 中通过按钮创建 url 链接

php - 通过 window.opener 将值从弹出窗口传递到父窗口

javascript - Jquery ajax 不工作(Laravel 4)

javascript - 如何正确使用带有 lodash debounce 的 Vue JS watch