> 웹 프론트엔드 > JS 튜토리얼 > Vue에서 양방향 바인딩을 구현하는 네 가지 방법

Vue에서 양방향 바인딩을 구현하는 네 가지 방법

亚连
풀어 주다: 2018-05-29 17:11:15
원래의
2695명이 탐색했습니다.

이 글에서는 양방향 바인딩을 구현하기 위한 Vue의 네 가지 방법을 주로 소개합니다. 매우 훌륭하고 참고할만한 가치가 있습니다. 필요하신 분들은 참고하세요

1. v-model 명령

<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(&#39;update:visible&#39;, newVisible) .

3. 모델 속성(JSX/렌더링 기능)

Vue 2.2.0 이후 버전에서는 컴포넌트의 v-model을 커스터마이징할 수 있어 JSX/렌더링 기능에서 v-model을 구현할 수 있습니다. 항상 그럴 수는 없지만 구성 요소의 다양한 구성을 고려해야 합니다(my-dialog 구성 요소의 모델이 { prop: 'visible', event: 'change' } 라고 가정):

{
 render(h) {
  return h(&#39;my-dialog&#39;, {
   props: { value: this.dialogVisible },
   on: { input: newVisible => this.dialogVisible = newVisible }
  })
 }
}
로그인 후 복사

다음과 같아야 합니다. this:

{
 render(h) {
  return h(&#39;my-dialog&#39;, {
   props: { visible: this.dialogVisible },
   on: { change: newVisible => this.dialogVisible = newVisible }
  })
 }
}
로그인 후 복사

하지만 model 속성을 사용하면 소품과 이벤트에 신경 쓰지 않는다는 목적을 완전히 달성할 수 있습니다.

{
 render(h) {
  return h(&#39;my-dialog&#39;, {
   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: &#39;prompt&#39;,
 props: {
  answer: String,
  visible: Boolean
 },
 computed: {
  _answer: {
   get() {
    return this.answer
   },
   set(value) {
    this.$emit(&#39;input&#39;, value)
   }
  },
  _visible: {
   get() {
    return this.visible
   },
   set(value) {
    this.$emit(&#39;update:visible&#39;, 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 &#39;vue-better-sync&#39;
export default {
 name: &#39;prompt&#39;,
 mixins: [
  VueBetterSync({
   prop: &#39;answer&#39;, // 设置 v-model 的 prop
   event: &#39;input&#39; // 设置 v-model 的 event
  })
 ],
 props: {
  answer: String,
  visible: {
   type: Boolean,
   sync: true // visible 属性可用 .sync 双向绑定
  }
 }
}
</script>
로그인 후 복사

위 내용은 제가 모든 사람을 위해 편집한 내용입니다. 도움이 되기를 바랍니다. 앞으로도 다들.

관련글:

jQuery+Cookie는 스킨 전환 기능 구현

jQuery에서 구현한 Enter 트리거 버튼 이벤트 기능 예시

사용자 이름 사용 가능 여부를 확인하는 jQuery 기반 Ajax 검증 예시

위 내용은 Vue에서 양방향 바인딩을 구현하는 네 가지 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿