列表渲染指令v-for
基本用法
v-for一定是写在要遍历的元素上,v-for后接等号,类似于item in items(相当于 for 循环遍历)
遍历多个对象一定是遍历的数组
遍历完,一定要用模板渲染,才能显示
<!-- template --><div id="app"><ul><li v-for="item in items">{{item}}</li></ul></div><!-- js --><script type="text/javascript">var app = new Vue({el: '#app',data: {items:[1,2,3,4,5]}})</script>
对象遍历
遍历多个对象+索引
第一个item ,第二个 index 索引
<ul><li v-for="(item, index) in items">{{item}}{{index}}</li></ul><!-- js --><script type="text/javascript">var app = new Vue({el: '#app',data: {items: [{1:1},{2:2},{3:3},{4:4},]},})</script>
遍历一个对象的多个属性
参数: 第一个为值,第二个为键名,第三个为索引
<!-- template --><div id="app"><ul><li v-for="(value,key,index) in items">{{value}}{{key}}{{index}}</li></ul></div><!-- js --><script type="text/javascript">var app = new Vue({el: '#app',data: {items: {1:1,2:2,3:3,4:4,}},})</script>
条件渲染指令
基本用法
v-if后接的是等号:等号后的内容必须是布尔值
v-if的实例用法弊端:
Vue 在渲染元素时 ,出于效率考虑,会尽可能地复用已有的元素而非重新渲染
对不想让其复用的标签或者元素,加入key即可
v-if,v-else
<div v-if="type==='name'">用户名 :<input type="text" placeholder="请输入用户名" key="name"></div><div v-else>密码 :<input type="text" placeholder="请输入密码" key="psd"></div><button v-on:click="toggleType">点我切换</button><script type="text/javascript">var app = new Vue({el: '#app',data: {},methods:{toggleType:function () {//三目运算符this.type = (this.type==='name' ?'password' : 'name')}}})</script>
v-else-if
<div v-if="type === 'A'">A</div><div v-else-if="type === 'B'">B</div><div v-else-if="type === 'C'">C</div><div v-else>Not A/B/C</div>
v-show
<p v-show="9>a">我被渲染</p>
v-if和v-show的比较
- v-if:在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建,
开销较高,在运行时条件很少改变时使用。
应用在要实时改变页面,股票,天气走势图
- v-show:永远存在于页面中,只是调整css dispaly属性 none/block,开销较小。
v-text | v-html
模板取值{{ }},有个弊端:当网速很慢或者 JavaScript 出错的时候
会在页面显示{{xxx}}此时就可以用 v-text 解决这个问题
<div>{{LGD}}</div><!-- 上面和下面是一样的 --><div v-text="LGD"></div>
v-html输出 html 代码
<p v-html="message"></p>
v-on
<!-- template --><div id="app">点击次数: {{count}}<button v-on:click="handle()">点击我每次加1</button>//@click 是语法糖<button @click="handle(8)">点击我每次加8<button></div><script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script><script>var app = new Vue({el:"#app",data:{count: 0},methods:{handle(count) {count = count || 1;this.count += count;}}})</script>
v-model
以下model 都需要在 data 中声明初始值
data:{count:1,status: [],sex: 男,selected: ''}
input
<input type="text" v-model="message">
textarea
<textarea cols="30" rows="10" v-model="message"></textarea>
checkbox
<input type="checkbox" id="first" value="1" v-model="status"><label for="first">有效</label><input type="checkbox" id="second" value="2" v-model="status"><label for="second">无效</label><div>状态:{{status}}</div>
radio
<input type="radio" id="one" value="男" v-model="sex"><label for="one">男</label><input type="radio" id="two" value="女" v-model="sex"><label for="one">女</label><div>性别:{{sex}}</div>
select
<select v-model="selected"><option disabled value="">请选择</option><option>A</option><option>B</option><option>C</option></select><div>Selected: {{ selected }}</div>
v-pre
在模板中跳过vue的编译,直接输出原始值,
如果在标签中加入v-pre就不会输出vue中的data值了<div v-pre>{{message}}</div>
v-cloak
解决初始化慢导致页面闪动的最佳实践
在vue渲染完指定的整个DOM后才进行显示。
一般与display:none 结合使用 ```html // css [v-cloak] { display: none; }
// html
{{message}}
<a name="Qqj4f"></a>## v-once定义它的元素和组件只渲染一次```html<div v-once>第一次绑定的值:{{message}}</div>
