七.列表渲染

1.示例

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

  

ps:
a.如果不需要索引,可以简写为item in items
b.item in items中的in可以用of替代

2.渲染一个对象:

<template>
<div id="app">
<span v-for="(value, key, index) in obj">
value: {{ value }}, key: {{ key }}, index: {{ index }}
</span>
</div>
</template> <script>
export default {
name: 'app',
data () {
return {
obj: {
first: 10,
second: 20,
third: 30
}
}
}
}
</script>

  

ps:如果是对象的话,列表渲染的第二个参数为key,第三个参数为索引

3.数组更新检测

Vue 包含一组观察数组的变异方法,所以它们也将会触发视图更新。这些方法如下:

push()
pop()
shift()
unshift()
splice()
sort()
reverse()

  

4.由于 JavaScript 的限制,Vue 不能检测以下变动的数组:
a.当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue
b.当你修改数组的长度时,例如:vm.items.length = newLength

为了解决a问题,可以使用

Vue.set(example1.items, indexOfItem, newValue)

example1.items.splice(indexOfItem, 1, newValue)

  

为了解决b问题,可以使用

example1.items.splice(newLength)

  

5.还是由于 JavaScript 的限制,Vue 不能检测对象属性的添加或删除
可以使用 Vue.set(object, key, value)来解决相应

6.显示过滤或排序后的结果;可以使用computed属性或方法

<template>
<div id="app">
<span v-for="(value, index) in filterItem(lists)">
value: {{ value }}, index: {{ index }}
</span>
</div>
</template> <script>
export default {
name: 'app',
data () {
return {
obj: [0, 1, 2, 7]
}
},
computed: {
lists () {
return this.obj.filter(function (item) {
return item > 0
})
}
},
methods: {
filterItem (lists) {
return lists.filter(function (item) {
return item > 1
})
}
}
}
</script>

  

7.一段取值范围

<div>
<span v-for="n in 10">{{ n }} </span>
</div>

  

八.事件处理

1.示例:

<template>
<div id="app">
<button @click="onClick('hi', $event)">click</button>
</div>
</template> <script>
export default {
name: 'app',
methods: {
onClick (msg, event) {
if (event) {
event.preventDefault()
}
alert(msg)
}
}
}
</script>

  

2.事件修饰符

Vue.js 为 v-on 提供了 事件修饰符。通过由点 (.) 表示的指令后缀来调用修饰符。

.stop
.prevent
.capture
.self
.once

<!-- 阻止单击事件冒泡 -->
<a v-on:click.stop="doThis"></a>
<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- 修饰符可以串联 -->
<a v-on:click.stop.prevent="doThat"></a>
<!-- 只有修饰符 -->
<form v-on:submit.prevent></form>
<!-- 添加事件侦听器时使用事件捕获模式 -->
<div v-on:click.capture="doThis">...</div>
<!-- 只当事件在该元素本身 (比如不是子元素) 触发时触发回调 -->
<div v-on:click.self="doThat">...</div>
<!-- 点击事件将只会触发一次 -->
<a v-on:click.once="doThis"></a>

  

3.键盘事件

<input v-on:keyup.13="submit">

  

全部的按键别名:

.enter
.tab
.delete (捕获“删除”和“退格”键)
.esc
.space
.up
.down
.left
.right

  

可以通过全局 config.keyCodes 对象自定义键值修饰符别名:

// 可以使用 v-on:keyup.f1
Vue.config.keyCodes.f1 = 112

  

九.表单输入绑定

1.你可以用 v-model 指令在表单控件元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。

ps:v-model 会忽略所有表单元素的 value、checked、selected 特性的初始值。因为它会选择 Vue 实例数据来作为具体的值。你应该通过 JavaScript 在组件的 data 选项中声明初始值。

2.文本:

<template>
<div id="app">
<span>{{ msg }}</span>
<input v-model="msg">
</div>
</template> <script>
export default {
name: 'app',
data () {
return {msg: 'ok'}
}
}
</script>

  

3.多行文本

<template>
<div id="app">
<span>{{ msg }}</span>
<textarea v-model="msg"></textarea>
</div>
</template> <script>
export default {
name: 'app',
data () {
return {msg: 'ok'}
}
}
</script>

  

ps:
在文本区域插值 (<textarea></textarea>) 并不会生效,应用 v-model 来代替。

4.复选框

<template>
<div id="app">
<input type="checkbox" id="checkbox" v-model="checked">
<label for="checkbox">{{ checked }}</label>
</div>
</template> <script>
export default {
name: 'app',
data () {
return {checked: true}
}
}
</script>

  

多个勾选框,绑定到同一个数组:

<template>
<div id="app">
<input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
<label for="jack">Jack</label>
<input type="checkbox" id="john" value="John" v-model="checkedNames">
<label for="john">John</label>
<input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
<label for="mike">Mike</label>
<br>
<span>Checked names: {{ checkedNames }}</span>
</div>
</template> <script>
export default {
name: 'app',
data () {
return {checkedNames: []}
}
}
</script>

  

5.单选按钮

<template>
<div id="app">
<input type="radio" id="one" value="One" v-model="picked">
<label for="one">One</label>
<br>
<input type="radio" id="two" value="Two" v-model="picked">
<label for="two">Two</label>
<br>
<span>Picked: {{ picked }}</span>
</div>
</template> <script>
export default {
name: 'app',
data () {
return {picked: ''}
}
}
</script>

  

6.选择列表

<template>
<div id="app">
<select v-model="selected">
<option disabled value="">请选择</option>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
<span>Selected: {{ selected }}</span>
</div>
</template> <script>
export default {
name: 'app',
data () {
return {selected: ''}
}
}
</script>

  

绑定一个数组

<template>
<div id="app">
<select multiple v-model="selected">
<option disabled value="">请选择</option>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
<span>Selected: {{ selected }}</span>
</div>
</template> <script>
export default {
name: 'app',
data () {
return {selected: []}
}
}
</script>

  

用v-for渲染:

<template>
<div id="app">
<select v-model="selected">
<option v-for="option in options" v-bind:value="option.value">
{{ option.text }}
</option>
</select>
<span>Selected: {{ selected }}</span>
</div>
</template> <script>
export default {
name: 'app',
data () {
return {
selected: 'A',
options: [
{ text: 'One', value: 'A' },
{ text: 'Two', value: 'B' },
{ text: 'Three', value: 'C' }
]}
}
}
</script>

  

7.值绑定:
对于单选按钮,勾选框及选择列表选项,v-model 绑定的 value 通常是静态字符串 (对于勾选框是逻辑值):

<!-- 当选中时,`picked` 为字符串 "a" -->
<input type="radio" v-model="picked" value="a">
<!-- `toggle` 为 true 或 false -->
<input type="checkbox" v-model="toggle">
<!-- 当选中时,`selected` 为字符串 "abc" -->
<select v-model="selected">
<option value="abc">ABC</option>
</select>

  

有时我们想绑定 value 到 Vue 实例的一个动态属性上,这时可以用 v-bind 实现,并且这个属性的值可以不是字符串

8.复选框的值绑定:

<input
type="checkbox"
v-model="toggle"
v-bind:true-value="a"
v-bind:false-value="b"
>

  

9.单选按钮的值绑定

<input type="radio" v-model="pick" v-bind:value="a">

  

10.选择列表的选项:

<select v-model="selected">
<!-- 内联对象字面量 -->
<option v-bind:value="{ number: 123 }">123</option>
</select>

  

11.修饰符

.lazy
在默认情况下,v-model 在 input 事件中同步输入框的值与数据 ,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步

<!-- 在 "change" 而不是 "input" 事件中更新 -->
<input v-model.lazy="msg" >

  

.number
如果想自动将用户的输入值转为 Number 类型 (如果原值的转换结果为 NaN 则返回原值),可以添加一个修饰符 number 给 v-model 来处理输入值

<input v-model.number="age" type="number">

  

.trim
如果要自动过滤用户输入的首尾空格,可以添加 trim 修饰符到 v-model 上过滤输入

<input v-model.trim="msg">

  

vue笔记二的更多相关文章

  1. 自学vue笔记 (二) : 实例与生命周期

    一: 什么是实例 我们说了,Vue 应用都应该从构建一个 Vue 实例开始.它管理着挂载在它身上的所有内容,因此实例是一个根实例, 所有的组件都应该挂载在根实例上面.创建一个 Vue 实例,需要通过 ...

  2. vue 笔记二

    vue制作weibo 交互 vue-> 1.0 vue-resource ajax php 服务器环境(node) this.$http.get()/post()/jsonp() this.$h ...

  3. Vue笔记目录

    Vue笔记目录 一.Vue.js介绍 二.vue基础-vue-cli(vue脚手架) ...持续更新中,敬请期待

  4. 微信小程序学习笔记二 数据绑定 + 事件绑定

    微信小程序学习笔记二 1. 小程序特点概述 没有DOM 组件化开发: 具备特定功能效果的代码集合 体积小, 单个压缩包体积不能大于2M, 否则无法上线 小程序的四个重要的文件 *js *.wxml - ...

  5. 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  6. jQuery源码笔记(二):定义了一些变量和函数 jQuery = function(){}

    笔记(二)也分为三部分: 一. 介绍: 注释说明:v2.0.3版本.Sizzle选择器.MIT软件许可注释中的#的信息索引.查询地址(英文版)匿名函数自执行:window参数及undefined参数意 ...

  7. Mastering Web Application Development with AngularJS 读书笔记(二)

    第一章笔记 (二) 一.scopes的层级和事件系统(the eventing system) 在层级中管理的scopes可以被用做事件总线.AngularJS 允许我们去传播已经命名的事件用一种有效 ...

  8. Python 学习笔记二

    笔记二 :print 以及基本文件操作 笔记一已取消置顶链接地址 http://www.cnblogs.com/dzzy/p/5140899.html 暑假只是快速过了一遍python ,现在起开始仔 ...

  9. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

随机推荐

  1. Java并发容器--ConcurrentHashMap

    引子 1.不安全:大家都知道HashMap不是线程安全的,在多线程环境下,对HashMap进行put操作会导致死循环.是因为多线程会导致Entry链表形成环形数据结构,这样Entry的next节点将永 ...

  2. win7 iis 7.0 碰到 503错误,找到的解决方案

    Service Unavailable HTTP Error 503. The service is unavailable. 今天要布署一个网站,在自己的电脑上,结果碰到服务器503错误,找应用程序 ...

  3. WebApi初探之路由配置

    本文介绍了ASP.NET Web API路由HTTP请求控制器. 如果你熟悉ASP.NET MVC,Web API路由是和MVC路由非常相似的.主要差别是Web API使用HTTP方法而不是URI路径 ...

  4. Linux Mint---安装docky

    这个安装的时候没啥难度,直接在软件中心安装一下就可以了,效果很赞的,linux下最棒的dock, 简洁大方,效果好! 只不有过一点需要注意,这个东东直接很上拖是添加不上去的 需要从/usr/share ...

  5. checkbox选中 解决兼容问题

    jquery 1.9 checkbox 是否选中 if($("#chk_selectedall").prop('checked')) checkbox 选中 $("#ch ...

  6. [LeetCode] Combinations 回溯

    Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For exampl ...

  7. BeeFramework 笔记 四(UISignal 总结)

    http://yang152412.blog.163.com/blog/static/175861582201332321351862/ 一.UISignal的工作模式 1.发送Signal,比如从V ...

  8. MTK_GPIO口的定制

    http://blog.csdn.net/zuoyioo7/article/details/77863291如果需要定制GPIO口呢,需要使用mediatek/dct/DrvGen.exe工具,点击O ...

  9. Linux安转jdk

    1. 创建目录 > mkdir  /opt/java > cd /opt/java 2. 下载jdk压缩包到上述目录 jdk-8u162-linux-x64.tar.gz 3. 解压缩.建 ...

  10. openshift 云平台基于kubernetes

    转载:https://www.kubernetes.org.cn/3208.html 目前红帽的核心产品PaaS平台OpenShift,最初在2012年释出时是使用自家开发的容器调度工具,但在2014 ...