官术网_书友最值得收藏!

Conditional templates with v-if

We need one last thing before testing our change; the main and preview panes shouldn't be displayed if no note is selected--it would not make sense for the user to have an empty editor and preview pane pointing to nothing, and it would make our code crash since selectedNote would be null. Thankfully, the v-if directive can dynamically take parts out of the template when we want. It works just like the JavaScript if keyword, with a condition.

In this example, the p element will not be in the DOM at all while the loading property is falsy:

<p v-if="loading">
  Loading...
</p>

There are also two other useful directives, v-else and v-else-if, that will work as you might have expected:

<p v-if="loading">
  Loading...
</p>

<p v-else-if="processing">
  Processing
</p>

<p v-else>
  Content here
</p>

Back in our app, add the v-if="selectedNote" condition to both the main and preview panes so that they are not added to the DOM until a note is selected:

<!-- Main pane -->
<section class="main" v-if="selectedNote">
  ...
</section>

<!-- Preview pane -->
<aside class="preview" v-if="selectedNote" v-html="notePreview">
</aside>

The repetition here is a bit unfortunate, but Vue has us covered. You can surround both elements with a special <template> tag that acts like braces in JavaScript:

<template v-if="selectedNote">
  <!-- Main pane -->
  <section class="main">
    ...
  </section>

  <!-- Preview pane -->
  <aside class="preview" v-html="notePreview">
  </aside>
</template>

At this point, the app should look like this:

The <template> tag will not be present in the DOM; it is more like a ghost element that is useful to regroup real elements together.

主站蜘蛛池模板: 莱阳市| 宣化县| 昌乐县| 逊克县| 那坡县| 包头市| 博爱县| 东方市| 天全县| 富蕴县| 友谊县| 漯河市| 陆河县| 安西县| 怀来县| 曲周县| 汤原县| 乐清市| 乐平市| 开化县| 大石桥市| 泰和县| 新巴尔虎右旗| 遂平县| 夏邑县| 永嘉县| 元氏县| 新兴县| 光泽县| 汾阳市| 佛学| 宜君县| 双牌县| 阿拉尔市| 天峨县| 专栏| 安远县| 越西县| 甘孜| 乐山市| 探索|