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

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.

主站蜘蛛池模板: 云和县| 韶关市| 合阳县| 凤凰县| 龙门县| 彩票| 香河县| 上栗县| 如皋市| 当涂县| 五原县| 治多县| 兴仁县| 岳阳县| 肇源县| 灯塔市| 镶黄旗| 库车县| 旬阳县| 陈巴尔虎旗| 惠东县| 乌兰县| 台中市| 疏勒县| 苏尼特左旗| 轮台县| 盘锦市| 江源县| 翁牛特旗| 桑日县| 太仓市| 宁乡县| 太湖县| 织金县| 乐业县| 南江县| 得荣县| 广宗县| 北安市| 桦甸市| 秀山|