Vue.js前端框架系统学习(5)——Vue指令之v-for,v-on,v-bind,v-。。。

更新时间:2023-06-04 08:32:03 阅读: 评论:0

Vue.js前端框架系统学习(5)——Vue指令之v-for,v-on,v-bind,v-。。。接上⼀篇⽂章,这篇⽂章来整理⼀下其他的⼀些vue指令。先申明⼀下,关于指令的⼀些概念都搬运⾃官⽹,如果有哪些不理解可以直接上官⽹进⾏学习。
列表渲染之v-for
Expects: Array | Object | number | string | Iterable (since 2.6)
Usage:
基于源数据多次渲染元素或模板块。此指令之值,必须使⽤特定语法 alias in expression,为当前遍历的元素提供别名:
<div v-for="item in items">
{{ }}
</div>
另外也可以为数组索引指定别名 (或者⽤于对象的键):
<div v-for="(item, index) in items"></div>
惊心动魄的一幕<div v-for="(val, key) in object"></div>
<div v-for="(val, name, index) in object"></div>
v-for 的默认⾏为会尝试原地修改元素⽽不是移动它们。要强制其重新排序元素,你需要⽤特殊 attribute key 来提供⼀个排序提⽰:
<div v-for="item in items" :key="item.id">
{{ }}
</div>
我们可以⽤ v-for 指令基于⼀个数组来渲染⼀个列表。v-for 指令需要使⽤ item in items 形式的特殊语法,其中 items 是源数据数组,⽽ item 则是被迭代的数组元素的别名。
//derectives.vue
<template>
<div>
<h1>Derectives</h1>
<ul>
<li v-for="item in items" :key="ssage">
{{ssage}}
</li>
</ul>
</div>
</template>
<script>
export default {
name: 'Derectives',
data () {
return {
items: [
{ message: 'name1' },
{ message: 'name2' }
]
长颈鹿卡通}
}
}
</script>
v-for 还⽀持⼀个可选的第⼆个参数,即当前项的索引index。
//derectives.vue
<template>
<div>
<h1>Derectives</h1>
<ul>
<li v-for="(item, index ) in items" :key="ssage">
{{ index }}+{{ssage}}+{{item.name}}
</li>
</ul>
</div>
</template>
<script>
export default {
name: 'Derectives',
data () {
return {
items: [
{ message: 'I am good', name: 'Andy' },
{ message: 'I am sad', name: 'Lious' }
]
}
}
}
</script>
可以完成这样的效果。
在刚刚的v-for中,我使⽤到了:key,也就是绑定关键字为message,会根据message的结果进⾏遍历。这个在后⾯会涉及。
官⽅给出的建议如是:
为了给 Vue ⼀个提⽰,以便它能跟踪每个节点的⾝份,从⽽重⽤和重新排序现有元素,你需要为每项提供⼀个唯⼀ key attribute:<div v-for="item in items" v-bind:key="item.id">  //这边的v-bind可以简化为:
<!-- 内容 -->
</div>
建议尽可能在使⽤ v-for 时提供 key attribute,除⾮遍历输出的 DOM 内容⾮常简单,或者是刻意依赖默认⾏为以获取性能上的提升。
因为它是 Vue 识别节点的⼀个通⽤机制,key 并不仅与 v-for 特别关联。后⾯我们将在指南中看到,它还具有其它⽤途。
不要使⽤对象或数组之类的⾮基本类型值作为 v-for 的 key。请⽤字符串或数值类型的值。
关于v-for的其他⽤法,还请移步
v-on事件处理
缩写:@
预期:Function | Inline Statement | Object
参数:event
修饰符:
.stop - 调⽤ event.stopPropagation()。
.prevent - 调⽤ event.preventDefault()。
.capture - 添加事件侦听器时使⽤ capture 模式。
.lf - 只当事件是从侦听器绑定的元素本⾝触发时才触发回调。
.{keyCode | keyAlias} - 只当事件是从特定键触发时才触发回调。
.native - 监听组件根元素的原⽣事件。
.once - 只触发⼀次回调。
.left - (2.2.0) 只当点击⿏标左键时触发。
.right - (2.2.0) 只当点击⿏标右键时触发。
.middle - (2.2.0) 只当点击⿏标中键时触发。
.passive - (2.3.0) 以 { passive: true } 模式添加侦听器
⽤法:
绑定事件监听器。事件类型由参数指定。表达式可以是⼀个⽅法的名字或⼀个内联语句,如果没有修饰符也可以省略。
⽤在普通元素上时,只能监听原⽣ DOM 事件。⽤在⾃定义元素组件上时,也可以监听⼦组件触发的⾃定义事件。
在监听原⽣ DOM 事件时,⽅法以事件为唯⼀的参数。如果使⽤内联语句,语句可以访问⼀个 $event property:v-on:click="handle('ok', $event)"。
从 2.4.0 开始,v-on 同样⽀持不带参数绑定⼀个事件/监听器键值对的对象。注意当使⽤对象语法时,是不⽀持任何修饰器的。
我们来实现⼀下
//derectives.vue
<template>
<div>
<h1>Derectives</h1>
<button @click="count += 1"> 点此按钮加⼀</button>  //这⾥我将v-on简写为了@
<p>已经点击了{{count}} 下</p>
</div>
</template>
<script>
写猫的作文
export default {
name: 'Derectives',
data () {
return {
count: 0  //初始化count为0
}
}
}
</script>
我们完成的事件即在每⼀次点击按钮时将count 加⼀,当然了这是最最简单的⼀种使⽤v-on的⽅式。
我们需要⽤到vue中的⼀个methods,也就是事件处理⽅法。
<template>
<div>
<h1>Derectives</h1>
<button @click="say('hello')"> Hello !</button>
<hr>
<button @click="greet">Greet</button>
</div>
</template>
<script>
export default {
name: 'Derectives',
data () {
return {
name: 'Andy'
}
},
//⽅法合集
算命的人说的话可信吗
methods: {
say: function (message) {
alert(message)
},
greet: function () {
alert('Welcome' + this.name)  //this指向当前实例
}
}
}
</script>
我在这⾥写了两个click事件,并绑定到了对应的⽅法。
其中say function 是⼀个有参的⽅法,可以接受⼀个message参数,并通过alert显⽰。
greet function 是⽆参的⽅法,它从当前实例中获取到name的值并拼接字符串后输出。
事件修饰符
在事件处理程序中调⽤ event.preventDefault() 或 event.stopPropagation() 是⾮常常见的需求。尽管我们可以在⽅法中轻松实现这点,但更好的⽅式是:⽅法只有纯粹的数据逻辑,⽽不是去处理 DOM 事件细节。
为了解决这个问题,Vue.js 为 v-on 提供了事件修饰符。之前提过,修饰符是由点开头的指令后缀来表⽰的。
.stop
.prevent
.capture
.lf
.
once
.passive
电脑浏览器打不开
<!-- 阻⽌单击事件继续传播 -->
<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>
<!-- 只当在 event.target 是当前元素⾃⾝时触发处理函数 -->
<!-- 即事件不是从内部元素触发的 -->
<div v-on:click.lf="doThat">...</div>
<!-- 点击事件将只会触发⼀次 -->
<a ="doThis"></a>
这边仅做搬运,个⼈觉得已经功能介绍已经很清楚了,可以⾃⾏尝试。
v-bind 绑定
缩写::
预期:any (with argument 含参 ) | Object (without argument ⽆参 )
参数:attrOrProp (optional)
修饰符:
.prop - 作为⼀个 DOM property 绑定⽽不是作为 attribute 绑定。
.camel - (2.1.0+) 将 kebab-ca attribute 名转换为 camelCa。(从 2.1.0 开始⽀持)
.sync (2.3.0+) 语法糖,会扩展成⼀个更新⽗组件绑定值的 v-on 侦听器。
⽤法:
动态地绑定⼀个或多个 attribute,或⼀个组件 prop 到表达式。
在绑定 class 或 style attribute 时,⽀持其它类型的值,如数组或对象。可以通过下⾯的教程链接查看详情。
在绑定 prop 时,prop 必须在⼦组件中声明。可以⽤修饰符指定不同的绑定类型。
没有参数时,可以绑定到⼀个包含键值对的对象。注意此时 class 和 style 绑定不⽀持数组和对象。
我们来具体实现⼀下:
绑定HTML Class
通过给v-bind:class 传递⼀个对象,从⽽动态地切换class
<template>
<div>
<h1>Derectives</h1>
<div :class=" ClassObject "></div>  // ClassObject在data中
</div>
</template>
<script>
export default {
name: 'Derectives',
data () {
return {
ClassObject: {
active: true,
error: fal
} //这⾥定义了两个class属性active和error
}
},
}
</script>
这⾥我将active和error 两个class分别设为true和fal.看⼀下页⾯渲染效果。
不难发现,只有true的active被加载到class中去了。
其他⽤法请参照官⽅⽂档。
绑定内联样式style
v-bind:style 的对象语法⼗分直观——看着⾮常像 CSS,但其实是⼀个 JavaScript 对象。CSS property 名可以⽤驼峰式 (camelCa) 或短横线分隔 (kebab-ca,记得⽤引号括起来) 来命名:
<template>
<div>
<h1>Derectives</h1>
<div :>This is the styleObject.</div>
</div>
</template>
<script>
公务员面试题目
export default {
name: 'Derectives',
data () {
return {
styleObject: {
color: 'red',
fontSize: '30px'
}
}
},
methods: {玉化
}
}
</script>
同样的,:style可以将多个样式对象应⽤到同⼀个元素上。
v-model表单控件的绑定
预期:随表单控件类型不同⽽不同。
限制:
<input>
<lect>
<textarea>
components
修饰符:
- 取代 input 监听 change 事件
- 输⼊字符串转为有效的数字
- 输⼊⾸尾空格过滤
⽤法:
在表单控件或者组件上创建双向绑定。
注意,这种v-model的绑定形式为双向绑定
你可以⽤ v-model 指令在表单 <input>、<textarea> 及 <lect> 元素上创建双向数据绑定。它会根据控件类型⾃动选取正确的⽅法来更新元素。尽管有些神奇,但 v-model 本质上不过是语法糖。它负责监听⽤户的输⼊事件以更新数据,并对⼀些极端场景进⾏⼀些特殊处理。
v-model 会忽略所有表单元素的 value、checked、lected attribute 的初始值⽽总是将 Vue 实例的数据作为数据来源。你应该通过 JavaScript 在组件的 data 选项中声明初始值。
接下来⽤HTML中的表单元素做演⽰:
radio单选框
<template>
<div>
<h1>Derectives</h1>
<div id="radio">
<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>
<hr>
选择的为:{{picked}}
</div>
</div>
</template>
<script>
export default {
name: 'Derectives',
data () {
return {
picked: ''
}
}
}
</script>
lect下拉菜单
<lect v-model="lected">
<option disabled value="">请选择</option>
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
</lect>
<span>Selected: {{ lected }}</span>
<script>
export default {
name: 'Derectives',
data () {
return {

本文发布于:2023-06-04 08:32:03,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/983690.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:事件   元素   绑定   触发   对象   数据   类型
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图