【发布时间】:2018-02-20 06:06:25
【问题描述】:
我正在尝试创建一个像 v-if 这样的自定义指令,因此它只会在传递给元素的数据不为空时呈现。例如:
<div v-if="!_.isEmpty(data.employer)">{{ data.employer.name }}</div>
仅当 data.employer 不为空时才会呈现,因此不会引发引用错误。我正在尝试创建一个指令,将其简化为 v-notEmpty="data.employer" 并在指令内运行逻辑,但问题是它在呈现元素后对自定义指令执行挂钩,因此它会引发参考错误雇主未定义。
有什么方法可以让自定义指令与 v-if 完全一样,它在实际创建元素之前运行逻辑。这是我到目前为止所拥有的:
Vue.directive('notEmpty', (el, binding) => {
if (_.isEmpty(binding.value)) {
el.style.display = 'none';
} else {
el.style.display = 'initial';
}
});
【问题讨论】:
-
这通常可以通过使用 Vue 提供的 slot API 来解决:vuejs.org/v2/guide/…
-
抱歉,有点迷惑……使用插槽可以解决什么问题?我使用插槽,但不确定如何解决我的问题。你能提供一个简单的例子来说明你的意思吗?
-
等等...对不起,我完全误读了。我的错。
-
您有什么特别的原因要使用自定义指令吗?
-
您尝试做的类似于 v-show 指令,但 v-if 不同。如果条件为假, v-if 不会做任何事情,但是, v-show 仍然会渲染元素,只需使用 css 对其进行切换。所以双花括号中的表达式仍然会被执行,所以你得到了引用错误。
标签: vue.js vuejs2 vue-component