2017-07-06 19 views
0

私はVue.jsに新たなんだ、私はちょうどここ(https://vuejs.org/v2/guide/conditional.html)を条件付きレンダリングのドキュメントを読んで何とかそれを動作させることはできません...Vue.jsで要素を条件付きでレンダリングする方法は?

マイコード:

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

私はアプリケーションがインスタンス化された後にのみ、テンプレートタグをレンダリングします。 私はこのコードのバリエーションを成功させることなく試しました。 誰かを助けることができますか?

+0

? CDNまたはCLI? –

+0

私はCDN ..を使用しています。コードは両方と異なるのですか? – raphadko

+0

ええ、あなたがvue.jsを学び始めているなら、あなたはベストプラクティスをはるかによくします。 –

答えて

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>

+0

これは良いことですが、どうやってその反対ですか? APIからデータを取得してvueオブジェクトを作成した後、「読み込み中」画面を非表示にしたいのですか? – raphadko

+0

@raphadkoそれはあなたが尋ねた質問ではありません。しかし、それを行うにはいくつかの方法があります。 1つは、読み込み画面をVueで制御し、ページが読み込まれたときに読み込み画面を表示し、読み込んだ条件付きレンダリングテクニックを使用してデータが返されたときに非表示にすることができます。何らかの理由で読み込み画面がVue外にある場合でも、データが取得されるとVueコードから隠すことができます。 – Bert

0

これを試してボタンを削除してください。関数内でインスタンスを呼び出す必要はありません。

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

まあ、すぐに 'app'をロードしたくないのですが、ボタンをクリックするだけです。ボタンをクリックする前に私のページに生のタグ{{message}}を表示したくありません。 – raphadko

+0

@raphadkoボタンをクリックするとそのメッセージが表示されますか?私は正しいですか? –

関連する問題