本文已参与「新人创作礼」活动,一起开启掘金创作之路。
前言
大家好,我是除了开发,什么都想试试的布布。用vue开发项目已经很长一段时间了,但是工作上却没写出什么高质量代码。过段时间要参加他人的项目,怎么着也不能在小问题上出差错。为了给自己打预防针,开始vue相关小知识点的总结之路,愿未来越来越好!
核心知识点
Vue模板语法
Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML,所以能被遵循规范的浏览器和 HTML 解析器解析
插值文本
数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值,但是HTML特性、属性值不能用Mustache 语法,应该使用v-bind指令。比如:v-bind:title="title"
列表渲染 条件渲染
用 v-for 指令基于一个数组来渲染一个列表。 v-for 指令需要使用 item in items 形式的特殊语法,其中 items 是源数据数组,而 item 则是被迭代的数组元素的别名。
v-if指令用于条件性的渲染某一块内容。这块内容只会在指定的表达式返回truthy 值得时候渲染。
注意:
v-showVSv-if
v-show通过css属性display控制元素显示,元素总是存在v-if惰性渲染元素,若一开始条件为falsy,元素是不存在的
示例:
<div id="app">
<!-- 条件渲染 -->
<p v-if="flowers.length == 0">没有花花了~</p>
<!-- 列表渲染 -->
<p v-else>
<ul>
<li v-for="f in flowers">{{f}}</li>
</ul>
</P>
</div>
<script src="vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
flowers: ['蔷薇', '玫瑰']
}
})
</script>
class与style绑定
表达式结果的类型除了字符串之外,还可以是对象或数组。
计算属性和监听器
模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护,此时就可以考虑计算属性和监听器。
计算属性 vs 监听器
-
监听器更通用,理论上计算属性能实现的侦听器也能实现
-
处理数据的场景不同,监听器适合一个数据影响多个数据,计算属性适合一个数据受多个数据影响
-
计算属性有缓存性,计算所得的值如果没有变化不会重复执行
-
监听器适合执行异步操作或较大开销操作的情况
示例
<p>
<!-- 绑定表达式 -->
<!-- 花朵种类:{{flowers.length + '类'}} -->
<!-- 计算属性 -->
<!-- 花朵数量总数:{{total}} -->
<!-- 监听器 -->
花朵数量总数:{{totalCount}}
</p>
<script>
const app = new Vue({
computed: {
total() {
return this.flowers.length + '类'
}
},
// 下面这种不能生效,因为初始化时不会触发
// watch: {
// flowers(newValue, oldValue) {
// this.totalCount = newValue.length + '类'
// }
// },
watch: {
flowers: {
immediate: true,
// deep: true,
handler(newValue, oldValue) {
this.totalCount = newValue.length + '类'
}
}
},
})
</script>
模板语法是如何实现的?
在底层的实现上,Vue 将模板编译成虚拟 DOM 渲染函数。结合响应系统,Vue 能够智能地计算出最少需要重新渲染多少组件,并把 DOM 操作次数减到最少。
试试在自己写好的上面程序的 最后一行 打印一下 console.log(app.$options.render) 研究一下吧!