【问题标题】:v-if on a component template tagv-if 在组件模板标签上
【发布时间】:2017-11-23 15:58:44
【问题描述】:

来自docs

因为 v-if 是一个指令,它必须附加到单个 元素。但是如果我们想要切换多个元素怎么办?在这个 在这种情况下,我们可以在一个元素上使用 v-if,它作为 隐形包装。最终渲染的结果将不包括 元素。

但是在我的组件中的模板上:

<template v-if="false">
    <div>
       ....
    </div>
</template>

但组件仍然呈现。

我问是因为我想在组件上加上一个钩子,所以如果 v-if 为真,我可以在 beforeMountedbeforeDestroyed 中做一些代码,如果为假。

【问题讨论】:

  • 将要条件渲染的组件分组到父组件中,然后添加 v-if 到父组件

标签: vue.js vuejs2


【解决方案1】:

如果我不明白你在做什么......

您将 v-if 放入 .vue 文件中的模板标签,对吗? 像这样

// component.vue
<template v-if="false">
   <div>
     My Component
   </div>
</template>
<script>
export default {
     name: 'my-component'
};
</script>
<styles>
</styles>

对吗?

如果是,你做错了。

模板中有一个标签供Webpack Vue Loader加载组件模板。

所以if 必须放在模板标签内。

// component.vue
<template>
   <div v-if="false">
     My Component
   </div>
</template>
<script>
export default {
     name: 'my-component'
};
</script>
<styles>
</styles>

如果您需要“隐藏”多个元素,只需封装到另一个div

【讨论】:

【解决方案2】:

正如Lucas Katayama 所说,您不能在SFC 中使用v-if,但隐藏组件的另一种方法是在其父组件中的该组件上使用v-if

【讨论】:

    猜你喜欢
    • 2019-01-03
    • 1970-01-01
    • 2020-02-25
    • 2018-02-06
    • 2018-04-04
    • 1970-01-01
    • 2018-11-25
    • 2011-12-09
    • 2015-10-14
    相关资源
    最近更新 更多