注意,不应该使用箭头函数来定义method函数(例如plus: () => this.a++)。理由是箭头函数绑定了父级作用域的上下文,所以 this 将不会按照期望指向组件实例,this.a 将是undefined。
写一个箭头函数时,这个this就是window
文件->首选项->配置用户代码->
html.json:
{
"Print to vue": {
"prefix": "vue",
"body": [
"",
"",
"",
" ",
" ",
" ",
" Document ",
"",
"",
" ",
" ",
"",
" ",
" ",
" ",
"",
""
],
"description": ""
}
}
}
vue.json
{
"Print to vue": {
"prefix": "vue",
"body": [
" ",
"",
" ",
" ",
" ",
],
"description": ""
}
}
四种方式:
Document
{{message}} - {{message}}
{{counter * 10}}
{{ message.split(" ").reverse().join(" ") }}
{{getReverseMessage()}}
{{ isShow ? "哈哈哈": "" }}
v-once用于指定元素或者组件只渲染一次:
当数据发生变化时,元素或者组件以及其所有的子元素将视为静态内容并且跳过;
该指令可以用于性能优化;
用于更新元素的 textContent
默认情况下,如果我们展示的内容本身是 html 的,那么vue并不会对其进行特殊的解析。
如果我们希望这个内容被Vue可以解析出来,那么可以使用 v-html 来展示;
v-pre用于跳过元素和它的子元素的编译过程,显示原始的Mustache标签:
跳过不需要编译的节点,加快编译的速度;
这个指令保持在元素上直到关联组件实例结束编译。
和 CSS 规则如 [v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Mustache 标签直到组件实
例准备完毕。
vue3中允许template模板中有多个根元素
v-bind用于绑定一个或多个属性值,或者向另一个组件传递props值
如果属性名称不是固定的,我们可以使用 :[属性名]=“值” 的格式来定义
如果我们希望将一个对象的所有属性,绑定到元素上的所有属性,
可以直接使用 v-bind 绑定一个对象
如v-bind="info"
此时会变成
缩写:@
参数:event
修饰符:
v-show
和v-if
的区别
v-for
"value in object";
"(value, key) in object";
"(value, key, index) in object"
Vue 将被侦听的数组的变更方法进行了包裹,所以它们也将会触发视图更新。这些被包裹过的方法包括:
生成新的数组
,比如 filter()
、concat()
和 slice()
举栗:向列表插入一个元素,如何最快渲染?
* 没有key的时候采用Diff算法:比较新旧节点,找到可复用的节点,比对进行增删移的操作,节省性能。 从前遍历到更改后面的节点。(三步,从头,增删,移动尾部元素)
* 有key的时候,先从前遍历到后遍历,根据元素的个数决定挂载新节点还是删除旧节点。如果是位置节点的序列,会先移动位置再比较(五步:从头,从尾,新元素挂载,旧元素删除,位置节点排序)
官方的解释对于初学者来说并不好理解,比如下面的问题:
template-->VNode-->真实DOM
默认情况下侦听器只会针对监听的数据本身的改变(内部发生的改变是不能侦听的)
举个栗子:
Document
{{info.name}}
注意:
friends:[{name:'why'},{name:'code'}]
watch侦听"friends[0].name":function(newName,oldName){console.log(newName,oldName)}
使用 $watch 的API:
this.$watchs
来侦听;
created () {
const unwatch= this.$watch("info",function(newInfo,oldInfo) {
console.log(newInfo,oldInfo);
},{
deep:true,
immediate:true
})
}
// unwatch()
this.$watch
返回的是一个回调函数值,再次调用这个unwatch可以取消侦听
Document
书籍名称
出版日期
价格
购买数量
操作
{{index+1}}
{{book.name}}
{{book.date}}
{{formatPrice(book.price)}}
{{book.count}}
总价:{{formatPrice(totalPrice)}}
购物车为空~~~!