이 글에서는 참고용으로 Vue 지시문을 사용하는 방법을 공유합니다. 구체적인 내용은 다음과 같습니다
1. 지시문 등록
지시문은 컴포넌트와 마찬가지로 먼저 등록해야 합니다. 두 가지 방법이 있습니다. 하나는 글로벌 등록입니다:
Vue.directive('dirName',function(){ //定义指令 });
다른 하나는 로컬 등록입니다:
new Vue({ directives:{ dirName:{ //定义指令 } } });
2. 명령어 정의
<p id="app"> <input type="text" v-focus="name" v-model="name" :data-name="name"> <button type="button" @click="name='zw'">click</button> <!--当点击按钮的时候name改变,继而触发update中的方法--> </p> <script> Vue.directive('focus',{ bind: function(el, binding){ console.log('bind:',binding.value); }, inserted: function(el, binding){ console.log('insert:',binding.value); }, update: function(el, binding, vnode, oldVnode){ el.focus(); console.log(el.dataset.name);//这里的数据是可以动态绑定的 console.table({ name:binding.name, value:binding.value, oldValue:binding.oldValue, expression:binding.expression, arg:binding.arg, modifiers:binding.modifiers, vnode:vnode, oldVnode:oldVnode }); }, componentUpdated: function(el, binding){ console.log('componentUpdated:',binding.name); } }); new Vue({ el:'#app', data:{ name:'zwzhai' } }); </script>
3. Hook 함수 정의
바인딩: 다음 속성을 포함하는 개체:
이름: v- 접두사를 제외한 명령 이름.value: 지시문의 바인딩 값(예: v-my-directive="1 + 1"), value 값은 2입니다.
oldValue: 명령어 바인딩의 이전 값으로, update 및 componentUpdated 후크에서만 사용할 수 있습니다. 값이 변경되었는지 여부에 관계없이 사용할 수 있습니다.
표현식: 바인딩된 값의 문자열 형식입니다. 예를 들어 v-my-directive="1 + 1" 의 경우 표현식 값은 "1 + 1"입니다.
arg: 명령에 전달된 매개변수입니다. 예를 들어 v-my-directive:foo의 경우 arg 값은 "foo"입니다.
수정자: 수정자를 포함하는 개체입니다. 예를 들어 v-my-directive.foo.bar에서 modifier object modifiers의 값은 { foo: true, bar: true }입니다.
vnode: Vue 컴파일로 생성된 가상 노드입니다. 자세한 내용은 VNode API를 확인하세요.
oldVnode: 이전 가상 노드로, update 및 componentUpdated 후크에서만 사용할 수 있습니다.
이러한 매개변수는 문서를 읽어보면 알 수 있으므로 자세히 설명하지 않겠습니다. Bingding의 여러 속성에 대한 내 견해를 공유하겠습니다. 값 속성은 리터럴 또는 A 단일로 전달될 수 있습니다. 명령문(위와 같음)은 ;과 같은 변수 형식일 수도 있습니다. value 바인딩 값에 액세스할 때 얻는 것은 직접 작성된 이름, 즉 v-focus="name"이 아니며, 이 이름은 항상 변수이므로 정의하고 할당해야 하며 arg는 값에 직접 액세스할 수 있습니다. , v-focus :foo와 같은 경우 후크 함수에서 얻는 것은 문자열 foo입니다.