VueJS: Xử lý form


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

Khi sử dụng Vuex ở chế độ strict, có thể hơi phức tạp khi sử dụng v-model trên một phần của state thuộc về Vuex:

<input v-model="obj.message">

Giả sử obj là một thuộc tính được tính toán trả về một đối tượng từ store, v-model ở đây sẽ cố gắng biến đổi trực tiếp obj.message khi người dùng nhập vào đầu vào. Trong chế độ strict, điều này sẽ dẫn đến lỗi do mutation không được thực hiện bên trong trình xử lý mutation Vuex rõ ràng.

Cách "Vuex" để giải quyết điều này là ràng buộc giá trị <input> của nó và gọi một action trên input hoặc sử kiện change:

<input :value="message" @input="updateMessage">
// ...
computed: {
  ...mapState({
    message: state => state.obj.message
  })
},
methods: {
  updateMessage (e) {
    this.$store.commit('updateMessage', e.target.value)
  }
}

Và đây là trình xử lý mutation:

// ...
mutations: {
  updateMessage (state, message) {
    state.obj.message = message
  }
}

Thuộc tính computed hai chiều

Phải thừa nhận rằng, ở trên khá dài hơn một chút so với v-model +state local và ta cũng mất một số tính năng hữu ích từ v-model. Một cách tiếp cận khác là sử dụng thuộc tính được computed hai chiều với một setter:

<input v-model="message">
// ...
computed: {
  message: {
    get () {
      return this.$store.state.obj.message
    },
    set (value) {
      this.$store.commit('updateMessage', value)
    }
  }
}
» Tiếp: Thử nghiệm
« Trước: Chế độ strict
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!