ホームページ > 記事 > ウェブフロントエンド > Vue で双方向バインディングを実装する 4 つの方法
この記事では、主に双方向バインディングを実装するための Vue の 4 つの方法を紹介します。これは非常に優れており、必要な方は参考にしてください。
<input v-model="text" />上の例は単なる構文シュガーで、展開すると次のようになります:
<input :value="text" @input="e => text = e.target.value" />
2. .sync 修飾子
<my-dialog :visible.sync="dialogVisible" />これも構文シュガーで、剥がすと次のようになります:
<my-dialog :visible="dialogVisible" @update:visible="newVisible => dialogVisible = newVisible" />my-dialog コンポーネント目に見える変化がある場合に使用できます
this.$emit('update:visible', newVisible)
3. モデル属性 (JSX/レンダリング関数内)
{ render(h) { return h('my-dialog', { props: { value: this.dialogVisible }, on: { input: newVisible => this.dialogVisible = newVisible } }) } }次のようになります。これ:
{ render(h) { return h('my-dialog', { props: { visible: this.dialogVisible }, on: { change: newVisible => this.dialogVisible = newVisible } }) } }
ただし、model 属性を使用すると、props やイベントを気にしないという目的を完全に達成できます:
{ 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 } }} /> ) } }
4.
<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>コンポーネントのサイズが拡張されると、1 つまたは 2 つのコンポーネントを記述しても問題はありません。双方向バインディングを記述すると実際に問題が発生する可能性があります。そこで、生産性を解放するために、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+Cookieでスキン切り替え機能を実装jQueryで実装したEnterトリガーボタンイベント関数の例
ユーザー名が利用可能かどうかを確認するjQueryベースのAjax検証の例
以上がVue で双方向バインディングを実装する 4 つの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。