【发布时间】:2017-01-31 14:39:31
【问题描述】:
我正在玩 vue.js,但在正确使用 v-if 方面有些困难。
我正在尝试在模板内进行条件模板渲染。在created 方法中,变量isloaded 设置为true,这应该会导致模板重新渲染并让“正在加载数据”消息消失。
但是,日志表明,2s 的延迟有效,因此达到了回调,但看起来我没有正确更新数据变量。
我已经尝试了几件事,现在我将“true/false”更改为字符串,以便更接近官方主页上给出的示例,但仍然没有成功。我希望你能帮助我,因此提前非常感谢。
请在下面找到有趣的coden-ps:
var step1 = Vue.component('step1', {
template: '#step1',
data: function() {
return {
accounts: [],
isloaded: 'false'
}
},
created: function() {
console.log("created");
setTimeout(function() {
console.log("times over");
this.isloaded = 'true';
this.accounts = [{
id: 1234,
name: "germany"
}];
}, 2000);
},
methods: {
loaded: function() {
console.log(this.isloaded === 'true');
return this.isloaded === 'true';
}
}
})
new Vue({
el: '#main'
});
<script src="https://unpkg.com/vue@2.1.10/dist/vue.js"></script>
<template id="step1">
<div class="step1">
<h1>Welcome please choose your account:</h1>
<template v-if="isloaded === 'false'">
<p>Loading Data</p>
</template>
<template v-else>
<select>
<template v-for="account in accounts">
<option :value="account.id">{{ account.name }}</option>
</template>
</select>
</template>
</div>
</template>
<div id="main">
<step1></step1>
</div>
【问题讨论】:
-
这不会解决您的问题,但可能会阻止进一步的问题。由于
isLoaded是一个布尔值,你应该这样对待它。 'true' 和 'false' 应该只是true和false
标签: javascript vue.js