이 글에서는 양방향 바인딩을 구현하기 위한 Vue의 네 가지 방법을 주로 소개합니다. 매우 훌륭하고 참고할만한 가치가 있습니다. 필요하신 분들은 참고하세요
<input v-model="text" />
위의 예는 단지 구문 설탕이며, 확장하면 다음과 같습니다:
<input :value="text" @input="e => text = e.target.value" />
<my-dialog :visible.sync="dialogVisible" />
이것도 구문 설탕이며, 떼어내면 다음과 같습니다.
<my-dialog :visible="dialogVisible" @update:visible="newVisible => dialogVisible = newVisible" />
my-dialog 구성 요소 눈에 보이는 변화가 있을 때 사용할 수 있습니다 this.$emit('update:visible', newVisible)
.
Vue 2.2.0 이후 버전에서는 컴포넌트의 v-model을 커스터마이징할 수 있어 JSX/렌더링 기능에서 v-model을 구현할 수 있습니다. 항상 그럴 수는 없지만 구성 요소의 다양한 구성을 고려해야 합니다(my-dialog 구성 요소의 모델이 { prop: 'visible', event: 'change' } 라고 가정):
{ render(h) { return h('my-dialog', { props: { value: this.dialogVisible }, on: { input: newVisible => this.dialogVisible = newVisible } }) } }
다음과 같아야 합니다. this:
{ render(h) { return h('my-dialog', { props: { visible: this.dialogVisible }, on: { change: newVisible => this.dialogVisible = newVisible } }) } }
하지만 model 속성을 사용하면 소품과 이벤트에 신경 쓰지 않는다는 목적을 완전히 달성할 수 있습니다.
{ render(h) { return h('my-dialog', { model: { value: this.dialogVisible, callback: newVisible => this.dialogVisible = newVisible } }) } }
JSX에서 이렇게 사용합니다:
{ render() { return ( <my-dialog {...{ model: { value: this.dialogVisible, callback: newVisible => this.dialogVisible = newVisible } }} /> ) } }
다음과 같은 요구 사항이 있습니다. 프롬프트 구성 요소를 개발하고 사용자 입력의 동기화를 요구하는 경우 버튼을 클릭하여 팝업 창을 닫습니다.
일반적으로 다음과 같이 합니다.
<template> <p v-show="_visible"> <p>完善个人信息</p> <p> <p>尊姓大名?</p> <input v-model="_answer" /> </p> <p> <button @click="_visible = !_visible">确认</button> <button @click="_visible = !_visible">取消</button> </p> </p> </template> <script> export default { name: 'prompt', props: { answer: String, visible: Boolean }, computed: { _answer: { get() { return this.answer }, set(value) { this.$emit('input', value) } }, _visible: { get() { return this.visible }, set(value) { this.$emit('update:visible', value) } } } } </script>
한두 개의 구성 요소를 작성해도 괜찮습니다. 구성 요소의 크기가 확장되면 양방향 바인딩을 작성하면 실제로 문제가 발생할 수 있습니다. 따라서 생산성을 향상시키기 위해 vue-better-sync 휠이 있으며 이를 사용하여 Prompt 구성 요소를 변환하는 방법을 살펴보겠습니다.
<template> <p v-show="actualVisible"> <p>完善个人信息</p> <p> <p>尊姓大名?</p> <input v-model="actualAnswer" /> </p> <p> <button @click="syncVisible(!actualVisible)">确认</button> <button @click="syncVisible(!actualVisible)">取消</button> </p> </p> </template> <script> import VueBetterSync from 'vue-better-sync' export default { name: 'prompt', mixins: [ VueBetterSync({ prop: 'answer', // 设置 v-model 的 prop event: 'input' // 设置 v-model 的 event }) ], props: { answer: String, visible: { type: Boolean, sync: true // visible 属性可用 .sync 双向绑定 } } } </script>
위 내용은 제가 모든 사람을 위해 편집한 내용입니다. 도움이 되기를 바랍니다. 앞으로도 다들.
관련글:
jQuery에서 구현한 Enter 트리거 버튼 이벤트 기능 예시
사용자 이름 사용 가능 여부를 확인하는 jQuery 기반 Ajax 검증 예시
위 내용은 Vue에서 양방향 바인딩을 구현하는 네 가지 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!