开发者问题收集

如何在 Vue.js 中有条件地渲染元素?

2017-07-06
2221

我是 Vue.js 的新手,我刚刚阅读了此处有关条件渲染的文档( https://v2.vuejs.org/v2/guide/conditional.html ),但不知何故无法使其工作...

我的代码:

<button onclick="showTemplate()">Teste</button>


<template v-if="app">

    <div id="app">
      {{ message }}
    </div>

</template>

function showTemplate(){
    var app = new Vue({
      el: '#app',
      data: {
        message: 'Hello Vue!'
      }
    })
}

我希望模板标签仅在应用程序实例化后渲染。 我也尝试过此代码的变体,但没有成功。 有人可以帮忙吗?

2个回答

使用 v-cloak v-cloak 的预期用途是隐藏 Vue,直到它被实例化。

function showTemplate() {
  var app = new Vue({
    el: '#app',
    data: {
      message: 'Hello Vue!'
    }
  })
}
[v-cloak] {
  display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.3.4/vue.js"></script>
<button onclick="showTemplate()">Teste</button>

<div id="app" v-cloak>
  {{ message }}
</div>

以下是检索数据时隐藏“加载”屏幕的方法。在本例中,按钮将用作我们的加载屏幕。

var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!',
    loaded: false
  },
  methods: {
    getData() {
      setTimeout(() => this.loaded = true, 2000)
    }
  }
})
[v-cloak] {
  display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.3.4/vue.js"></script>

<div id="app" v-cloak>
  <button v-if="!loaded" @click="getData">Get Data</button>

  <div v-if="loaded">
    {{ message }}
  </div>
</div>
Bert
2017-07-06

尝试此操作并移除按钮。您无需在函数内调用实例。

// put it on your index.html
<div id="app">
  {{ message }}
</div>

// put it on your script make sure that you have already a CDN of vuejs.
var app = new Vue({
   el: '#app',
   data: {
      message: 'Hello Vue!'
   }
})
Jrey
2017-07-06