Vue 2.0 구성 요소 데이터 의 양 방향 연결 문제 실현
6596 단어 vue구성 요소데이터양 방향 바 인 딩
구성 요소 양 방향 데이터 바 인 딩 실현
이전 절 에서 마지막 예 시 는 Vue 1.0 버 전의.sync 를 사용 하여 데이터 양 방향 연결 을 실현 합 니 다.먼저.sync 수식 자 를 버 리 고 구성 요소 의 양 방향 데이터 바 인 딩 을 실현 하 는 작업 을 살 펴 보 겠 습 니 다.Vue 가 제공 하 는 메커니즘 을 통 해 prop 를 직접 수정 하여 구성 요소 의 양 방향 데이터 바 인 딩 을 실현 합 니 다.
그 사고방식 은 대체로 이렇다.
데이터 렌 더 링 시 prop 렌 더 링 데 이 터 를 사용 합 니 다.
다음 예제 에 서 는'sync'를 사용 하여 양 방향 데이터 바 인 딩 효 과 를 실현 하지 않 았 습 니 다.
수 정 된 코드 는 다음 과 같 습 니 다.
<div id="app">
<div class="parent">
<h3> Parent </h3>
<ul>
<li>
<label> :</label>
<span>{{ name }}</span>
<input type="text" v-model="name" />
</li>
<li>
<label> :</label>
<span>{{ age }}</span>
<input type="number" v-model="age" />
</li>
</ul>
</div>
<child :my-name="name" :my-age="age" @update:my-name="val => name = val" @update:my-age="val => age = val"></child>
</div>
<template id="child">
<div class="child">
<h3> child </h3>
<ul>
<li>
<label> </label>
<span>{{ myName }}</span>
<input type="text" v-model="childMyName" />
</li>
<li>
<label> </label>
<span>{{ myAge }}</span>
<input type="number" v-model="childMyAge" />
</li>
</ul>
</div>
</template>
위의 이 예시 에서,우 리 는.sync 수식 자 를 사용 하지 않 았 지만,하위 구성 요 소 를 호출 할 때@update 를 사용 했다.
<child :my-name="name" :my-age="age" @update:my-name="val => name = val" @update:my-age="val => age = val"></child>
하위 구성 요소 에서 HTML 템 플 릿 에 렌 더 링 된 데 이 터 는 prop 데 이 터 를 사용 하지만 감청 input 은 하위 구성 요소 자체 가 정의 한 데 이 터 를 v-model 로 사용 합 니 다.이렇게 되면 prop 을 직접 수정 하지 않 을 것 이다.쉽게 말 하면 모든 prop 의 변 화 는 본질 적 으로 부모 구성 요소 에 의 해 이 루어 진다.JavaScript 의 코드 는 다음 과 같 습 니 다.
let parent = new Vue({
el: '#app',
data () {
return {
name: 'w3cplus',
age: 7
}
},
components: {
'child': {
template: '#child',
props: ['myName', 'myAge'],
data () {
return {
childMyName: this.myName,
childMyAge: this.myAge
}
},
watch: {
childMyName: function (val) {
this.$emit('update:my-name', val)
},
childMyAge: function (val) {
this.$emit('update:my-age', val)
}
}
}
}
})
최종 효 과 는 다음 과 같다.위의 예제 효 과 는 부모 구성 요소 의 데 이 터 를 수정 하 든 하위 구성 요소 의 데 이 터 를 수정 하 든 서로 영향 을 줍 니 다.
하위 구성 요소 에 props 의 my Name 과 my Age 를 쓸 수 없 기 때문에 data 에 복사 본 childMyName 과 childMyAge 를 만 듭 니 다.초기 값 은 props 속성 my Name 과 my Age 의 값 이 며,구성 요소 내 props 를 호출 해 야 하 는 모든 곳 에서 data 의 child MyName 과 child MyAge 를 호출 합 니 다.
components: {
'child': {
template: '#child',
props: ['myName', 'myAge'],
data () {
return {
childMyName: this.myName,
childMyAge: this.myAge
}
},
...
}
}
다음은 하위 구성 요소 에서 watch 를 통 해 props 속성의 my Name 과 my Age 를 감청 합 니 다.props 가 수정 되면 data 의 사본 인 childMyName 과 childMyAge 도 데 이 터 를 동기 화 해 야 합 니 다.
...
watch: {
childMyName: function (val) {
this.$emit('update:my-name', val)
},
childMyAge: function (val) {
this.$emit('update:my-age', val)
}
}
...
다음 에 해 야 할 일 은 구성 요소 내 props 속성 이 바 뀌 었 을 때 구성 요소 외(부모 구성 요소)에 알림 을 보 내 구성 요소 내 속성 변경 을 알 리 고 외부(부모 구성 요소)에서 자신의 데 이 터 를 변경 할 지 여 부 를 결정 하 는 것 입 니 다.다음 에 우 리 는 위의 방안 에 따라 이전 예제 의 switch 단 추 를 개조 합 니 다.
이로써 구성 요소 내부 데이터 와 구성 요소 외부 데이터 의 양 방향 연결,구성 요소 내외 데이터 의 동기 화 를 실현 했다.한 마디 로 하면 구성 요소 내부 가 스스로 바 뀌 었 으 니 외부 에 변경 할 지 말 지 를 결정 하 라 고 알려 준다.
어떤 props 가 양 방향 바 인 딩 에 적합 합 니까?
사실 Vue 에서 양 방향 으로 연 결 된 props 는 구성 요소 간 의 데이터 상태 관리 에 불리 합 니 다.특히 복잡 한 업무 에서 실제 프로젝트 에 서 는 양 방향 으로 연 결 된 것 을 최소 화하 고 너무 복잡 한 데이터 처리 로 Vuex 를 사용 하 는 것 을 권장 합 니 다.하지만 양 방향 연결 을 피 할 수 없 는 경우 가 많다.그럼 어떤 장면 에서 props 를 사용 하여 양 방향 연결 을 할 까요?
만약 당신 의 프로젝트 에서 아래 의 조건 을 동시에 만족 시 킬 때,우 리 는 props 를 사용 하여 양 방향 연결 을 하 는 것 을 고려 할 수 있 습 니 다.
Vue 에서 상술 한 구성 요소 통신 을 제외 하고 다른 방법 도 있 습 니 다.다음 절 에서 우 리 는 이 분야 의 지식 을 계속 공부 할 것 입 니 다.
총결산
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 Vue 2.0 구성 요소 데이터 의 양 방향 연결 문 제 를 실현 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 메 시 지 를 남 겨 주세요.소 편 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Fastapi websocket 및 vue 3(Composition API)1부: FastAPI virtualenv 만들기(선택 사항) FastAPI 및 필요한 모든 것을 다음과 같이 설치하십시오. 생성main.py 파일 및 실행 - 브라우저에서 이 링크 열기http://127.0.0.1:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.