vue 구성 요소 간 통신
7108 단어 vue구성 요소커 뮤 니 케 이 션
props 와$emit
부자 관계 만 이 방식 을 사용 할 수 있 습 니 다.부모 구성 요 소 는 하위 구성 요소 에 매개 변 수 를 props 로 전달 하고,자식 은 부모 에 게 전달 할 때$emit 사용자 정의 이 벤트 를 촉발 합 니 다.
1.props
<!-- parent.vue, ` ` props ` ` props, String , `:` js -->
<Child :name="name" :age="18" address="xxxxx"></Child>
...
data () {
return {
name: 'marry'
}
}
<!-- props, , v-bind -->
<blog-post v-bind="post"></blog-post>
post: {
id: 1,
title: 'My Journey with Vue'
}
//
<blog-post
v-bind:id="post.id"
v-bind:title="post.title"
></blog-post>
<!-- child.vue -->
...
// prop
props: ['name', 'age', 'address']
//prop , prop ,( ) Vue
// : 'String'
props: {
// (`null` `undefined` )
propA: Number,
//
propB: [String, Number],
//
propC: {
type: String,
required: true
},
//
propD: {
type: Number,
default: 100
},
//
propE: {
type: Object,
//
default: function () {
return { message: 'hello' }
}
},
//
propF: {
validator: function (value) {
//
return ['success', 'warning', 'danger'].indexOf(value) !== -1
}
}
}
// prop , property ( data、computed ) default validator 。
2.$emit
<!-- parent.vue -->
<Child @my-event="myEvent"></Child>
...
methods: {
myEvent(name){
this.name = name
}
}
<!-- child.vue -->
<div>
<button @click="$emit('my-event', name)"></button>
</div>
//
중앙 이벤트 버스크로스 와 형제 구성 요소 의 통신 문 제 를 해결 하 는 데 사용 되 며,공공 vue 인 스 턴 스 를 교묘 하 게 사용 합 니 다.$on,$emit,$off(사용자 정의 이벤트 모니터 제거)
방법 1:
main.js 에서 Vue 의 원형 에 공공 Vue 인 스 턴 스$bus 를 마 운 트 할 수 있 습 니 다.이렇게 하면 전역 어느 곳 에서 든 사용 할 수 있 습 니 다.
Vue.prototype.$bus = new Vue()
그리고 필요 한 곳 에 사용자 정의 이벤트 와 수신 인자 의 리 셋 함 수 를 등록 합 니 다.
this.$bus.$on('changeName', name => {
this.name = name
})
변경 이 필요 할 때 이 벤트 를 터치 하고 파 라 메 터 를 던 집 니 다.
this.$bus.$emit('changeName', 'wzj')
방법 2:util.js 파일 정의
import Vue from 'vue'
const bus = new Vue()
export default bus
bus 가 필요 한 파일 에 도입
import bus from '../util' //
//
bus.$on('changeName', name => {
this.name = name
})
//
bus.$emit('changeName', 'wzj')
vuex프로젝트 가 비교적 복잡 하고 다 중 구성 요소 공유 상태 에 대해 서로 다른 등급 은 통신 이 필요 하 다.
핵심 개념:
state, getter, mutation, action, module
//store/index.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export dafault new Vuex.Store({
state: {
name: '',
age: 0
},
getters: {
tranName(state){
return 'name: ' + state.name
}
},
mutations: {
changeName(state, name){
state.name = name
}
},
/*Action store context , context.commit mutation, context.state context.getters state getters */
actions: { // , commit mutations state
changeName(context, name){
context.commit('changeName', name)
}
},
modules: {}
})
구성 요소 에서 사용방법 1:
// state
this.$store.state.name
// getters
this.$store.getters.tranName
// mutations
this.$store.commit('changeName', 'wzj')
// actions
this.$store.dispatch('changeName', 'wzj')
방법 2:보조 함 수 를 사용 하여 로 컬 에 매 핑 합 니 다.여기 에는 간편 한 방식 만 열거 되 어 있 습 니 다.더 많은 공식 PC 방 을 찾 아 보 세 요.
import {mapState, mapGetters, mapMutations, mapActions} from 'vuex'
//state getters computed ,
computed: {
...mapState(['name', 'age']),
...mapGetters(['tranName'])
}
//mutations actions
methods: {
// `this.changeName()` `this.$store.commit('changeName')`
...mapMutations(['changeName'])
// `this.changeName()` `this.$store.dispatch('changeName')`
...mapActions(['changeName'])
}
$attrs 와$listeners부모 구성 요소 와 후대 구성 요소,이상 의 방법 으로 는 큰 인재 가 적 거나 첫 번 째 로 는 불편 합 니 다.
//app.vue
<div>
<One name="wzj" :age="age" address="xian" @changeAge="changeAge"></One>
</div>
...
data(){
return {
age: 10
}
},
methods: {
changeAge(age){
this.age = age
}
}
//one.vue
<div>
<div> :{{ name }}</div>
<div> :{{ age }}</div>
<Two v-bind="$attrs" v-on="$listeners"></Two>
<button @click="change"> 2</button>
</div>
...
props: ['name', 'age'],
//two.vue
<div>
<div>{{ address }}</div>
<button @click="change"> 2</button>
</div>
...
props: ['address'], // $attrs , props
methods: {
change(){
this.$emit('changeAge', 30)
}
}
이해:사실 조상 구성 요소 의 속성 과 사건 은 층 층 이 아래로 전달 되 었 습 니 다.그러나$attrs 와$listeners 로 전달 과정 에서 글 을 최적화 하고 간편 하 게 썼 습 니 다.또한 전달 하 는 과정 에서$listeners 구성 요 소 는 안의 모든 사건 을 촉발 할 수 있 습 니 다.$attrs 구성 요 소 는 이전에 props 로 설명 하지 않 았 던 나머지 속성 만 사용 할 수 있 음 을 밝 혔 습 니 다.이상 은 vue 구성 요소 간 통신 의 상세 한 내용 입 니 다.vue 구성 요소 통신 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.