Vue 명령 의 갈고리 함수 사용 방법
무엇이 복잡 한 조작 입 니까?
나의 이 해 는 복잡 한 논리 기능 의 포장,데이터 구동 에 어 긋 나 는 DOM 조작 과 일부 Hack 수단 에 대한 은폐 등 이다.우 리 는 항상 데 이 터 를 조작 하 는 형식 으로 기능 논 리 를 실현 하 기 를 기대한다.
갈고리 함수
사용자 정의 명령 에 대한 정 의 는 Vue 2 에 선택 할 수 있 는 갈고리 함수 가 5 개 있 습 니 다.
bid:한 번 만 호출 합 니 다.명령 이 처음으로 요소 에 연결 되 었 을 때 호출 합 니 다.이 갈고리 함수 로 바 인 딩 할 때 한 번 실행 하 는 초기 화 동작 을 정의 할 수 있 습 니 다.
inserted:부모 노드 에 연 결 된 요소 가 삽입 되 었 을 때 호출 합 니 다.(부모 노드 가 존재 하면 호출 할 수 있 습 니 다.document 에 저장 할 필요 가 없습니다.)
update:바 인 딩 요소 가 있 는 템 플 릿 이 업데이트 되 었 을 때 호출 됩 니 다.바 인 딩 값 이 변경 되 었 든 안 되 었 든 간 에.
componentUpdated:바 인 딩 요소 가 있 는 템 플 릿 이 업데이트 주 기 를 완성 할 때 호출 됩 니 다.
unbid:한 번 만 호출 하고 명령 과 요 소 를 풀 때 호출 합 니 다.
다음은 갈고리 함수 의 트리거 시 기 를 검증 하기 위해 간단 한 명령 을 정의 합 니 다.
template
<div id="app">
<my-comp v-if="msg" :msg="msg"></my-comp>
<button @click="update"> </button>
<button @click="uninstall"> </button>
<button @click="install"> </button>
</div>
script
Vue.directive('hello', {
bind: function (el) {
console.log('bind')
},
inserted: function (el) {
console.log('inserted')
},
update: function (el) {
console.log('update')
},
componentUpdated: function (el) {
console.log('componentUpdated')
},
unbind: function (el) {
console.log('unbind')
}
})
var myComp = {
template: '<h1 v-hello>{{msg}}</h1>',
props: {
msg: String
}
}
new Vue({
el: '#app',
data: {
msg: 'Hello'
},
components: {
myComp: myComp
},
methods: {
update: function () {
this.msg = 'Hi'
},
uninstall: function () {
this.msg = ''
},
install: function () {
this.msg = 'Hello'
}
}
})
페이지 불 러 올 때bind
inserted
구성 요소 업데이트 시
"업데이트"단 추 를 누 르 면 데이터 트리거 구성 요소 업 데 이 트 를 변경 합 니 다.
update
componentUpdated
구성 요소 마 운 트 해제 시
"마 운 트 해제"단 추 를 누 르 면 데 이 터 를 비 워 두 고 부정 적 판단 을 해서 구성 요 소 를 마 운 트 해제 합 니 다.
unbind
구성 요소 다시 설치 시
"설치"단 추 를 누 르 면 데이터 할당 은 구성 요 소 를 다시 설치 할 것 이 라 고 판단 합 니 다.
bind
inserted
구별
사례 의 운행 에서 5 개의 갈고리 함수 의 촉발 시기 에 대해 초보적인 인식 을 가지 게 되 었 다.의심 되 는 것 은 bid 와 inserted,update 와 componentUpdated 의 차이 점 입 니 다.
bind 와 inserted
문서 에 따 르 면 부모 노드 를 삽입 할 때 inserted 를 호출 하여 테스트 합 니 다.
bind: function (el) {
console.log(el.parentNode) // null
console.log('bind')
},
inserted: function (el) {
console.log(el.parentNode) // <div id="app">...</div>
console.log('inserted')
}
각각 두 개의 갈고리 함수 에서 부모 노드 를 출력 합 니 다.bid 시 부모 노드 는 null 이 고 inserted 시 부모 노드 가 존재 합 니 다.update 와 componentUpdated
이 두 가지 에 대한 소 개 는 단어 적 으로 구성 요소 업데이트 주기 와 관련 이 있 는 것 같 아서 계속 검증 합 니 다.
update: function (el) {
console.log(el.innerHTML) // Hello
console.log('update')
},
componentUpdated: function (el) {
console.log(el.innerHTML) // Hi
console.log('componentUpdated')
}
문제 없습니다.update 와 componentUpdated 는 구성 요소 업데이트 전과 업데이트 후의 차이 입 니 다.결론.
문서 말 이 맞습니다.
Demo
최선 의 실천
수요 에 따라 우 리 는 명령 을 초기 화하 고 명령 호출 파 라 메 터 를 업데이트 하 며 명령 이 존재 할 때의 메모리 점용 등 적절 한 시 기 를 선택해 야 한다.
비교적 흔히 볼 수 있 는 장면 은 명령 으로 의존 하지 않 는 제3자 라 이브 러 리 를 포장 하여 구성 요소 기능 을 확장 하 는 것 이다.건장 한 라 이브 러 리 는 인 스 턴 스 초기 화,파라미터 업데이트,인 스 턴 스 자원 사용 등 을 포함한다.
Vue.directive('hello', {
bind: function (el, binding) {
// bind
// , inserted
el.__library__ = new Library(el, binding.value)
},
update: function (el, binding) {
// ,
// update componentUpdated
el.__library__.setOptions(Object.assign(binding.oldValue, binding.value))
},
unbind: function (el) {
//
el.__library__.destory()
}
})
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Vue Render 함수로 DOM 노드 코드 인스턴스 만들기render에서createElement 함수를 사용하여 DOM 노드를 만드는 것은 직관적이지 않지만 일부 독립 구성 요소의 디자인에서 특수한 수요를 충족시킬 수 있습니다.간단한 렌더링 예는 다음과 같습니다. 또한 v...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.