Vue学习记录

Vue的MVVM

model层 把数据给到viewmodel层  然后再给到view层 显示出来

view的指令 给到viewmodel层解析 然后回调到medol层

指令
v-bind 动态绑定
1.动态绑定class属性

1)直接写在标签里
2)将布尔值存在 data 中
3)写入methods方法中






2.动态绑定 数组




案例:将数组打印出来,并要求点击哪一项,哪一项的文字颜色就变成红色

思路:将点击后的样式定义一个current类,然后动态获取current类
每个item都有一个索引号index,定义一个currentIndex=0,每点击一次 就将index赋值给currentIndex,使得当前的item改变样式




<h2 v-for="(item,index) in names"
:class="{current:currentIndex === index}"
@click="isClick(index)">
{{index+1}}-{{item}}



案例: 实现书籍购物车案例

几个重要小点
1.toFixed(2) 保留两位小数
2.使项目中的数据都保留两位小数的实现方法
1)可以定义一个方法,然后调用

getFinalPrice(price) {
return "¥" + price.toFixed(2);
},

2)加载器 filters的使用,

filters: {
showPrice() {
return "¥" + price.toFixed(2);
},
},

3.当数量 <=1 时,减号按钮不能点击
用到v-bind:disabled

<button @click="decrement(index)" v-bind:disabled="item.count <= 1">-

4.计算总价格时使用computed 计算属性 实现

computed: {
totalPrice() {
let totalPrice = 0;
for (let i = 0; i < this.books.length; i++) {
totalPrice += this.books[i].price * this.books[i].count;
}
return totalPrice;
},
},

5.移除按钮 使用 .splice()方法

removeHandle(index) {
this.books.splice(index, 1);
},

6.最后 当列表为零时 显示“购物车为零” 使用 v-if v-else 实现

知识点:
1.计算属性
计算属性computed (直接使用 不用加小括号)


{{fullname}}

computed:{
fullname:{
get(){
console.log("---调用了get方法----");
return this.firstname+' '+ this.lastname
},
set(){
console.log('---调用了set方法');

}
}
}

注:计算属性(计算之后只需要得到一个结果就好,所以set()方法省略 )
计算属性 一般没有set()方法 只读属性

计算属性computed和methods的区别
计算属性只调用一次(computed 会看值有没有改变 没有改变就直接打印结果)
methods会每次调用方法函数

2.事件监听v-on
1)如果该方法不需要额外参数,那么方法后的()可以不添加
2)如果需要同时传入某个参数,同时需要event时,可通过$event传入事件

情况一:事件调用方法没有参数


<button @click='btnclick1()'>按钮1
<button @click='btnclick1'>按钮1
methods: {
btnclick1(){
console.log('我是1号')
}
}

情况二:在事件定义时,写方法省略了小括号,但是方法本身需要一个参数



<button @click='btnclick2()'>按钮2
<button @click='btnclick2'>按钮2
methods: {
btnclick2(event){
console.log('我是2号',event)
}
}

情况三:在方法定义时,我们需要event,同时又需要其他参数


<button @click='btnclick3(456,$event)'>按钮3
<button @click='btnclick3'>按钮3
methods: {
btnclick3(abc){
console.log(abc,event)
}
}

3.v-on的修饰符

1)阻止冒泡 .stop
2)阻止默认事件 .prevent
3) 键盘点击回调 .enter(回车)

4.v-if v-else v-else-if

v-if:当满足了某个条件的时候,才执行什么

v-else:当不满足某个条件时,执行什么

v-else-if:多个条件的时候

5.问题思考:在有输入内容的情况下,切换了类型,文字依然显示之前的输入内容

原因:因为vue在进行dom渲染的时候 ,出于性能考虑,会尽可能的复用已经存在的元素,而不是创建新的元素
解决办法:如果不希望Vue出现类似重复利用的问题,可以给对应的input添加key,并且需要保证key值的不同

6.v-if 和 v-show 的区别

v-if:当条件为false时,包含v-if指令的元素根本就不会在dom中
v-show:当条件为false时,v-show知识在给元素添加display:none的样式

7.v-for 循环遍历

1)遍历数组
包含index
不包含index
2)遍历对象
value
value,key
value,key,index

8.v-model 双向绑定
Vue的v-model指令实现表单关系和数据的双向绑定

当输入框中输入内容的时候
1.input中的v-model绑定了message,所以会实时将输入的内容传递给message,message发生改变

2.当message发生改变时,因为上面使用了mustache语法,将message的值插入dom中,所以dom发生相应改变
所以通过 v-model 实现了双向绑定

v-model的原理
v-model 是一个语法糖
背后本质上是两个操作:
1.v-bind绑定一个value的属性
2.v-on指令给当前元素绑定input事件


9.v-model和radio/checkbox/select





您的选择是:{{isAgree}}



请选择你的喜好





你的选择是:{{fruit}}




你的选择是:{{hobbies}}

10.v-model的修饰符
1) .lazy:可以让数据在失去焦点或者点击回车的时候才同步数据
2) .number:当需要的类型是数字类型的时候
3) .trim:过滤掉内容两边的空格

11.组件化
1.调用vue.extend()方法
创建组件构造器
2.调用vue.component()方法
注册组件
3.在Vue 实例的作用范围
使用组件

父子组件的通信
1.父传子:
通过props向子组件传递数据
2.子传父
通过事件$emit向父组件发送消息

posted @ 2021-05-21 13:14  larissa404  阅读(59)  评论(0)    收藏  举报