【问题标题】:How to render an element conditionally in Vue.js?如何在 Vue.js 中有条件地渲染元素?
【发布时间】:2017-12-10 15:13:07
【问题描述】:

我是 Vue.js 的新手,我刚刚在此处阅读了有关条件渲染的文档 (https://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!'
      }
    })
}

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

【问题讨论】:

  • 你在用什么? CDN 还是 CLI?
  • 我正在使用 CDN..
  • 是的,如果你开始学习 vue.js,最好你做最佳实践。
  • 一个小评论:您在模板标签上使用v-if,它在div外部,它实际安装了Vue 实例。所以我相信&lt;template&gt; 标签永远无法访问该 Vue 函数,即使在创建 Vue 实例之后也是如此。

标签: javascript vue.js


【解决方案1】:

试试这个并删除按钮。您不需要在函数中调用实例。

// 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!'
   }
})

【讨论】:

  • 好吧,我不想立即加载“应用程序”,而是点击一个按钮..我不想在我的页面上显示原始标签 {{message}}我点击按钮。
  • @raphadko 您想在单击按钮时显示该消息吗?我说的对吗?
【解决方案2】:

使用v-cloakv-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>

【讨论】:

  • 这很好,但我该怎么做呢?如果我想在从 API 获取数据并创建 vue 对象后隐藏“加载”屏幕?
  • @raphadko 这不是你问的问题。但是,有很多方法可以做到这一点。第一,您可以让 Vue 控制加载屏幕,在页面加载时显示加载屏幕,并在使用您阅读的条件渲染技术返回数据时隐藏它。如果由于某种原因,您的加载屏幕在 Vue 之外,您仍然可以在检索到数据后将其隐藏在 Vue 代码中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
  • 2021-11-20
  • 2023-03-11
  • 2022-01-22
  • 2019-03-21
  • 2021-05-01
相关资源
最近更新 更多