VUE 入门基础(6)
六,条件渲染
v-if 添加一个条件块
<h1 v-if=“ok”>Yes</h1>
也可以用v-else 添加else 块
<template> 中 v-if条件组
因为v-if 是一个指令,需要将它添加到一个元素上,但是如果我们想切换多个元素呢可以把一个<template>
元素当做包装元素,并在上面使用v-if,最终的渲染结果不会包括它。
<template>
<h1>Title</h1>
<p>Paragraph 1</p>
<p>Paragraph 2</p>
</template>
v-else
可以用v-else 指令给v-if 添加一个else 块
<div v-if="Math.random() > 0.5">
Sorry
</div>
<div v-else>
Not sorry
</div>
v-else 元素必须紧跟在v-if元素或者v-else-if 的后面 否则它不能被识别。
v-else-if
作用 v-if 的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-else-if必须跟在v-if或者v-else-if之后
使用key控制元素的可重用
vue提供一种方式让你可以自己决定是否要复用元素,你要做的是添加一个属性key ,key 必须带有唯一的值。
<template v-if="loginType === 'username'">
<label>Username</label>
<input placeholder="Enter your username" key="username-input">
</template>
<template v-else>
<label>Email</label>
<input placeholder="Enter your email address" key="email-input">
</template>
<label> 元素仍然会被复用,因为没有添加了key 属性
v-show
v-show 的元素会始终渲染并保持在DOM 中v-show 是简单的切换元素的css 属性display
v-show 不支持<template>语法
七,列表渲染
v-for
用v-for 指令根据一组数组的选项列表进行渲染,v-for 指令需要以 item in items 形式的特殊语法
items 是源数组并且 item 是数组元素迭代的别名。
基本用法
<ul id="example-1">
<li v-for='item in items'>{{item.message}}</li>
</ul>
var example1 = new Vue({
el:'#example-1',
data: {
items: [
{message:'Foo'},
{message:'Bar'}
]
}
})
结果:
Foo
Bar
v-for 块中 ,我们拥有对父作用域属性的完全访问权限。
<ul id="example-2">
<li v-for="(item,index) in items">
{{parentMessage}} - {{ index }} - {{ item.message }}
</li>
</ul>
var example2 = new Vue({
el: '#example -2',
data: {
parentMessage: 'Parent',
items: [
{message: 'Foo'},
{message: 'Bar'}
]
}
})
结果:
Parent - 0 -Foo
Parent - 1 - Bar
也可以用 of 替代 in 作为分隔符,因为它是最接近 JavaScript 迭代器的语法:
<div v-for="item of items"></div>
Template v-for
如同 v-if 模板,你也可以用带有v-for 的<template> 标签来渲染多个元素块
<ul>
<template v-for="item in items">
<li>{{ itme.msg}}</li>
<li class="divider"></li>
</template>
</ul>
对象迭代 v-for
也可以用v-for 通过一个对象的属性来迭代
<ul id="repeat-object">
<li v-for="value in object">
{{value}}
</li>
</ul>
new Vue({
el: ‘#repeat-object’,
data: {
object: {
FirstName: 'John',
LastName: 'Doe',
Age: 30
}
}
})
结果:
John
Doe
30
也可以提供第二个的参数为键名:
<div v-for="(value,key) in object">
{{ key}} : {{ value }}
</div>
第三个参数为索引
<div v-for="(value,key,index) in object">
{{ key }} ,{{key}} ,{{ value }}
</div>
整数迭代 v-for
v-for 也可以取整数,在这种情况下,它将重复多次模板
<div>
<span v-for="n in 10">{{n}} </span>
</div>
组件 和v-for
在自定义数组里,你可以想任何普通元素一样使用v-for
<my-component v-for="item in items"></my-component>
然而他不能自动传递传递数据到组件里,因为组件有自己独立的作用域,为了传递数据到组件里,我们要用props.
<my-component v-for="(item, index) in items" v-bind:item="item" v-bind:index="index">
</my-component>
key
为了给vue 一个提示,以便它跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为,每一项
提供一个唯一key 属性,理想的key 值是每一项都有唯一id ,它的工作方式类似于一个属性,所以你需要v-bvind 来绑定动态值。
<div v-for="item in items" :key="item.id"></div>
建议尽可能使用 v-for 来提供 key ,除非迭代 DOM 内容足够简单,或者你是故意要依赖于默认行为来获得性能提升。
数组更新检测
变异方法
vue包含一组观察数组的变异方法,所以我们将会触发视图更新,这些方法如下。
push() pop() shift() unshift() splice()
sort() reverse()
重塑数组
变异方法会改变原始的数组,也有非变异方法,如:filter(),concat().slice(),这些不会改变原始数组,但是总是返回一个新数组,使用非变异方法的时候,可以用新数组变异方法时,可以用新数组替换久数组。
example1.items = example1.items.filter(function (item) {
return item.message.match(/Foo/)
})
显示过滤/ 排序结果
想要显示一个数组的过滤或排序副本,而不时间改变或重置原始数据,可以创建过滤或排序数组的计算属性。
<li v-for="n in evenNumbers">{{ n }}</li>
data: {
numbers: [1,2,3,4,5]
},
computed: {
evenNumbers: function() {
evenNumbers: function(){
return this.numbers.filter(function (number){
return number % 2 ===0
})
}
}
}
可以在计算属性不合适的情况下(列如,在嵌套 v-for 循环中) 使用method方法:
<li v-for="n in even(number)">{{ n }}</li>
data: {
numbers: [1,2,3,4,5]
},
methods: {
even: function(unmbers) {
return numbers.filter(function(number){
return number % 2 === 0
})
}
}
VUE 入门基础(6)的更多相关文章
- Vue学习记录第一篇——Vue入门基础
前面的话 Vue中文文档写得很好,界面清爽,内容翔实.但文档毕竟不是教程,文档一上来出现了大量的新概念,对于新手而言,并不友好.个人还是比较喜欢类似于<JS高级程序设计>的风格,从浅入深, ...
- Vue入门基础
前面的话 Vue中文文档写得很好,界面清爽,内容翔实.但文档毕竟不是教程,文档一上来出现了大量的新概念,对于新手而言,并不友好.个人还是比较喜欢类似于<JS高级程序设计>的风格,从浅入深, ...
- vue入门基础知识点测试
vue入门基础知识点测试 1.文本(值绑定){{var}}----控制<div></div>的值显示当前时间,且1秒更新一次.(可查阅 setinterval 函数,时间Dat ...
- Vue入门基础(火柴)
前言 由于个人十分欣赏博友——小火柴的蓝色理想,他的博文我看了大多数,觉得十分的精彩,然而很多都是看后即忘.我想除了没有经常动手敲代码,更可能是在看的时候忽略了很多细节,因此打算把他的博文通通给“抄袭 ...
- VUE 入门基础(8)
十,组件 使用组件 注册 可以通过以下这种方式创建一个Vue实例 new Vue({ el: '#some-element', }) 注册一个全局组件,你可以使用Vue.component(tagNa ...
- VUE 入门基础(7)
八,事件处理器 监听事件 可以用v-on 指令监听DOM 事件来触发一些javaScript <div id="example-1"> <button v-on: ...
- VUE 入门基础(4)
四,计算属性 基础例子 <div id='example'> <p>0riginal message: "{{message}}"</p> &l ...
- 02 . Vue入门基础之条件渲染,列表渲染,事件处理器,表单控件绑定
vue基础 声明式渲染 Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统 Example1 <!DOCTYPE html> <html> ...
- VUE 入门基础(9)
十一,深入响应式原理 声明响应式属性 由于Vue不允许动态添加根级响应式属性,所以你必须在初始化实例钱声明根级响应式属性,哪怕只有一个空值. var vm = new Vue({ data:{ // ...
随机推荐
- [Linux] 安装JBoss - CentOS
CentOS安装Jboss 7 AS方法:(安装java跳过) 1.首先下载JBoss 7 AS的zip文件. 2.使用SSH,上传到CentOS中.(如何使用的是wget命令下载,可以跳过些步),这 ...
- winform里操作打开在panel里的form窗体,子窗体操作同级子窗体或者父窗体的方法
最近开始了一个winform项目,原先一直都是web项目.遇到个问题,就是在框架内,左侧和中间的main都是用panel来实现的form,就是把form窗体打开到panel里,实现左侧是导航,中间是操 ...
- Rails :.nil? , .empty?, .blank? .present? 的区别
.nil? , .empty?, .blank? .present? 的区别 首先这三个都是判空的. 而 .nil? 和 .empty? 是ruby的方法. .blank? 是rails的方法 .ni ...
- 强势回归,Linux blk用实力证明自己并不弱!
Flash的出现把存储的世界搅翻了天,仿佛一夜之间发现了新大陆,所有旧世界的东西都变得笨拙.NVMe驱动义无反顾地抛弃了Linux blk,开发自己的队列管理. 当第一次看到NVMe重新使用Linux ...
- 黄聪:GeckoWebBrowser多窗口独立cookie
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 深入理解Session与Cookie
Session与cookie的作用都是为了保持访问用户与后端服务器的交互状态. cookie通过把所有要保存的数据通过HTTP协议的头部从客户端传递到服务端,又从服务端再传回到客户端,所有的数据都存储 ...
- jQuery中attr()、prop()、data()用法及区别
.attr(),此方法从jq1.0开始一直存在,官方文档写的作用是读/写DOM的attribute值,其实1.6之前有时候是attribute,有时候又是property..prop(),此方法jq1 ...
- SOCKET 服务器停止服务时清理连接操作
刚想到一个情况,正好是工作中遇到的. 当服务器停止时,正好有连接的请求正在被处理,而此时服务端需要等待该请求被正常的处理完,然后给客户端发送响应报文. 正常情况下,服务器停止的时候,是希望发送了响应报 ...
- boost timer 定时器 Operation cancel !
前面段时间处理一个定时器时,老是提示 操作取消. 硬是没搞明白为什么! 其实我遇到的这个情况很简单就是(boost::asio::deadline_timer timer)这个变量的生命同期结束了,对 ...
- 升级到VS2013.Update.4的问题
升级到VS2013.Update.4后,编译VS2010的解决方案出错,提示AxImp.exe找不到,到网上搜索后,没有找到能用的法子: 修复VS2013后也无法解决: 折腾2个小时后终于找到问题了: ...