Vue.js에서 커스텀 조건부 렌더 디렉티브를 만듭니다.
커스텀 Vue 조건부 디렉티브를 작성하는 방법을 찾고 있습니다.글로벌 메서드를 작성하고 v-if 내에서 호출할 수 있지만 코드를 명확하게 하기 위해 사용자 지정 지시문을 사용하고 싶습니다.
목적은 디렉티브로 요소를 꾸미고 GUID를 전달하는 것입니다(모두 사용자 권한에 따라 조건부 리다이너링을 처리하기 위한 것입니다). v-permission="'4ECE1FD4-4019-4CA2-AB9E-0A555CCBDB5B'"
지금 이 순간, 나는 단지 덧붙인다.display: none
지시의 요소에 따라bind
method와 이것은 내용을 숨기는 데는 문제가 없지만 요소를 렌더링하지 않는 것이 퍼포먼스에 도움이 됩니다.
어떻게 하면 이 일을 해낼 수 있을까요?
현재 지시 코드는 다음과 같습니다.
import Vue from 'vue'
Vue.directive('permission', {
bind: function (el, binding, vnode) {
if (binding.value) {
let hasPermission =
vnode.context.$store.getters.hasApiPermission(binding.value)
if (!hasPermission) {
el.style.display = 'none'
}
} else {
console.error('You must specify a permission ID')
}
}
})
음, 그것은 다음을 사용하여 가능하다.inserted
후크:
inserted
: 바인딩된 요소가 부모 노드에 삽입되면 호출됩니다.
코드 캡처 예시:
Vue.directive('permission', {
inserted: function (el, binding, vnode) {
if (binding.value) {
let hasPermission =
vnode.context.$store.getters.hasApiPermission(binding.value)
if (!hasPermission) {
el.parentNode.removeChild(el)
}
} else {
console.error('You must specify a permission ID')
}
}
})
단, 빌트인을 사용하는 것이 훨씬 더 좋습니다.v-if
지시.Vue 2는 가상 DOM을 기반으로 하기 때문에 문이 반환되어도 렌더링되지 않습니다.false
이 커스텀 디렉티브의 경우는, 우선 렌더링 되고 나서 삭제됩니다.
당신이 원하는 것을 이룰 수 있을지 모르겠어요.하지만 그게 정말 필요한지도 모르겠어.내 생각에 이런 건축은...
<tag v-if="getPerm('4ECE1FD4-4019-4CA2-AB9E-0A555CCBDB5B')">
...
</tag>
...이 정도면 충분히 선언적이야.
언급URL : https://stackoverflow.com/questions/47511243/create-a-custom-conditional-render-directive-in-vue-js
'source' 카테고리의 다른 글
vuejs 템플릿 내에서 스타일 태그를 사용하고 데이터 모델에서 업데이트 (0) | 2022.08.28 |
---|---|
VueJs - 전환에 따라 div 색상 변경 (0) | 2022.08.28 |
Vue 2.0 SSR 오류 페이지 (0) | 2022.08.27 |
다른 모듈의 getter를 사용하여 Vuex 상태를 설정하는 방법 (0) | 2022.08.27 |
Intelij에서 시리얼 버전 UID를 생성하는 방법 (0) | 2022.08.27 |