摘要:与绑定数据绑定一个常见需求是操作元素的列表和它的内联样式。两者只能选其一对象语法我们可以传给一个对象,以动态地切换。注意不支持语法。相比之下,简单得多元素始终被编译并保留,只是简单地基于切换。这意味着将分别重复运行于每个循环中。
vue Class 与 Style 绑定
绑定 HTML Class
对象语法
如下 data:
data: { isActive: true, hasError: false }
渲染为:
data: { classObject: { active: true, "text-danger": false } }
data: { isActive: true, error: null }, computed: { classObject: function () { return { active: this.isActive && !this.error, "text-danger": this.error && this.error.type === "fatal", } } }
数组语法
data: { activeClass: "active", errorClass: "text-danger" }渲染为:如果你也想根据条件切换列表中的 class ,可以用三元表达式:
此例始终添加 errorClass ,但是只有在 isActive 是 true 时添加 activeClass 。
不过,当有多个条件 class 时这样写有些繁琐。可以在数组语法中使用对象语法:
用在组件上
当你在一个定制的组件上用到 class 属性的时候,这些类将被添加到根元素上面,这个元素上已经存在的类不会被覆盖。
例如,如果你声明了这个组件:
Vue.component("my-component", { template: "" })然后在使用它的时候添加一些 class:
HTML 最终将被渲染成为:
同样的适用于绑定 HTML class :
当 isActive 为 true 的时候,HTML 将被渲染成为:
绑定内联样式
对象语法v-bind:style 的对象语法十分直观——看着非常像 CSS ,其实它是一个 JavaScript 对象。 CSS 属性名可以用驼峰式(camelCase)或短横分隔命名(kebab-case):
data: { activeColor: "red", fontSize: 30 }直接绑定到一个样式对象通常更好,让模板更清晰
data: { styleObject: { color: "red", fontSize: "13px" } }同样的,对象语法常常结合返回对象的计算属性使用。
数组语法v-bind:style 的数组语法可以将多个样式对象应用到一个元素上:
自动添加前缀当 v-bind:style 使用需要特定前缀的 CSS 属性时,如 transform,Vue.js 会自动侦测并添加相应的前缀。
条件渲染
v-ifv - if (插入 删除节点)
优秀
及格
不及格
hellowroldnice to meet youif...else结构if...else if...else结构,if-else用嵌入的方式放进去优秀
不及格
优秀
及格
不及格
v-else 元素必须立即跟在 v-if 或 v-show 元素的后面——否则它不能被识别。
template v-if如果想切换多个元素,可以把一个元素当作包装元素,并在上面使用v-if,最终的渲染结果不会包含它。
用key管理可复用的元素 Vue 会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染。这么做,除了使 Vue 变得非常快之外,还有一些有用的好处。例如,如果你允许用户在不同的登录方式之间切换: 这样也不总是符合实际需求,所以 Vue 为你提供了一种方式来声明“这两个元素是完全独立的——不要复用它们”。只需添加一个具有唯一值的 key 属性即可:hellowroldnice to meet you在上面的代码中切换 loginType 将不会清除用户已经输入的内容。因为两个模版使用了相同的元素, 不会被替换掉——仅仅是替换了它的的 placeholder Vue 为你提供了一种方式来声明“这两个元素是完全独立的——不要复用它们”。只需添加一个具有唯一值的 key 属性即可:现在,每次切换时,输入框都将被重新渲染注意: 元素仍然会被高效地复用,因为它们没有添加 key 属性v-show 另一个用于根据条件展示元素的选项是 v-show 指令。用法大致一样: 不同的是有 v-show 的元素会始终渲染并保持在 DOM 中。v-show 是简单的切换元素的 CSS 属性 display。注意 v-show 不支持 语法。不同的是带有 v-show 的元素始终会被渲染并保留在 DOM 中。v-show 是简单地切换元素的 CSS 属性 display v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——在条件第一次变为真时才开始局部编译(编译会被缓存起来)。相比之下,v-show 简单得多——元素始终被编译并保留,只是简单地基于 CSS 切换。 一般来说,v-if 有更高的切换消耗而 v-show 有更高的初始渲染消耗。因此,如果需要频繁切换 v-show 较好,如果在运行时条件不大可能改变 v-if 较好。Hello!
v-if 和 v-for 一起使用 当 v-if 与 v-for 一起使用时,v-for 具有比 v-if 更高的优先级。这意味着 v-if 将分别重复运行于每个 v-for 循环中。当你想为仅有的 一些 项渲染节点时,这种优先级的机制会十分有用注意: v-show 不支持 语法,也不支持 v-else
- {{item.text}}
var vm=new Vue({ data:{ items:[ {text:"chifan",isOk:true}, {text:"shuijue",isOk:false}, {text:"kandianshi",isOk:true}, {text:"dayouxi",isOk:true}, {text:"kandianying",isOk:false}, ] } });如果你的目的是有条件地跳过循环的执行,那么可以将 v-if 置于外层元素 (或 )上。列表渲染
v-for可以使用 v-for 指令基于一个数组渲染一个列表。这个指令使用特殊的语法,形式为 item in items,items 是数据数组,item 是当前数组元素的别名:
示例 --- 直接上代码:
- {{ item.message }}
var example1 = new Vue({ el: "#example-1", data: { items: [ { message: "Foo" }, { message: "Bar" } ] } });结果:
{% raw %} {{item.message}} {% endraw %}在 v-for 块内我们能完全访问父组件作用域内的属性,另有一个特殊变量 $index,正如你猜到的,它是当前数组元素的索引:
- {{ parentMessage }} - {{ $index }} - {{ item.message }}
var example2 = new Vue({ el: "#example-2", data: { parentMessage: "Parent", items: [ { message: "Foo" }, { message: "Bar" } ] } })结果:
{% raw%} {{ parentMessage }} - {{ $index }} - {{ item.message }} {% endraw %}另外,你可以为索引指定一个别名(如果 v-for 用于一个对象,则可以为对象的键指定一个别名):
v-for把对象属性渲染列表{{ index }} {{ item.message }}{{value}}也可以提供第二个的参数为键名:{{key}} is {{value}}第三个参数为索引:{{index}}{{key}} is {{value}}数组的更新检测
变异方法(修改了原始数组):vue.js包装了被观察数组的变异方法,故它们能出发视图更新,即当利用这些方法变更数组时,被渲染的内容会实时更新,被包装的方法有:
push() 数组末尾添加
pop() 数组末尾取出
shift() 数组开头取出
unshift() 数组开头添加
splice() 删除并插入
sort() 排序
reverse() 数组顺序颠倒
- {{item}}
替换数组(返回一个新数组): 数组从一个数组变为另一个数组时(记得,数组是按引用传递的),数据绑定依然生效;但前提是使用以下方法:对象更新检测 ( 待更新……………… )filter() 过滤,参数是一个函数,取其返回值为true的元素被添加到新数组
concat() 合并两个数组,返回的数组是合并后的
slice() 返回数组的拷贝,从开始索引到结束索引(前含后不含)
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/85149.html
相关文章
(原创)vue 学习笔记
摘要:菜鸟教程这是一个属性其值是字符串菜鸟教程同上这是一个属性其值是字符串用于定义的函数,可以通过来返回函数值。它们都有前缀,以便与用户定义的属性区分开来。 开篇语 我最近学习了js,取得进步,现在学习vue.js.建议新手学习,请不要用npm的方式(vue-cli,vue脚手架),太复杂了. 请直接下载vue.js文件本地引入,就上手学习吧参照菜鸟教程网站的vue.js教程http://...
前端每周清单第 44 期: 2017 JS 调查报告、REST 接口实时化、ESM 的过去与未来
摘要:巅峰人生年老兵思路上的转变,远比单纯提升技术更有价值本文节选自赵成教授在极客时间开设的赵成的运维体系管理课,是其对自己十年技术生涯的回顾与总结。赵成教授来自美丽联合集团,集团旗下两大主力产品是蘑菇街和美丽说,目前负责管理集团的技术服务团队。 showImg(https://segmentfault.com/img/remote/1460000012476504?w=1240&h=826...
发表评论
0条评论
pumpkin9
男|高级讲师
TA的文章
阅读更多
tensorflow2.4.1
阅读 2478·2023-04-25 21:26
能让你更早下班的Python垃圾回收机制
阅读 1486·2021-11-25 09:43
css 特殊属性
阅读 1899·2019-08-30 15:52
JavaScript实现 满天星 导航栏
阅读 914·2019-08-30 14:05
使用H5新标签重构旧项目时的思考
阅读 2598·2019-08-29 16:10
canvas 实现 github404动态效果
阅读 395·2019-08-29 13:48
用PerformanceTiming来检测页面性能
阅读 1837·2019-08-29 12:47
前端必备基础
阅读 1257·2019-08-23 18:04