vue2认识
声明式编程:
区分于命令式, 只需要声明数据即可,直接用
const wm = new Vue({
el:"#app", // 挂载到#app 模版上
data:{ // 数据层 Model层
msg:"hello world"
}
})
let json = { // 数据层 Model层
msg: "hello world",
age:18,
list:["a","b","c","d",'e']
}
// json已经 被vm对象所管控,只能在#app这个区域使用数据
const vm = new Vue({
el: "#app", // 挂载到#app 模版上
data: json
})
console.log(json); //
console.log(vm); // 它身上除了有json对象上的属性,还有对应的getter和setter方法
// 想改变json的msg的值,看看改一下vm(通过改变vm代理对象的 msg属性,照样修改了json对象的数据)
vm.msg = 'hello vue';// 走setter,
// Vue2.0 底层使用的Object.defineProperty
MVVM模型
viewmodel 层如何知道数据变化了,更改到view层
vm一旦创建,会将data上的数据数据,作为属性挂载到vm实例对象上(可以通过上述代码 vm.msg)
内部借助于Object.defineProperty(),将data中的属性遍历,并为每一个属性设置getter和stter方法
当获取数据时,会调用getter方法,设置数据时,调用setter方法
设置数据的时候,触发setter方法,setter方法内部 自动触发 watcher方法,进行新旧dom对比,更新渲染到dom上。
vue3认识
三层架构:
Model层:数据层(data 里面的数据)
vm层:控制层
view:视图层
vm层:将model的数据显示到视图层
Vue.createApp({
data() {
return {
msg: "hello world"//数据写这里
}
},
methods(){
//方法写这里
},
computed: {
// 对data中数据处理的 (长得像方法,使用起来像属性,计算属性)
},
}).mount("#app")//捆绑在这里
模板语法
声明式语法不支持将undefined和null声明式的渲染到页面,但是占了位置,其他都支持
Vue.createApp({
data () {
return {
msg:"hello",
num:10,
flag:true,
arr:[12,45,56],
obj:{name:'zs',age:18},
unde:undefined,
nu:null
}
}
}).mount("#app")
文本类指令
需求:除了使用{{}} 以外,有没有其他的方式为div设置内容
v-html = 'data中的变量' 写在标签上作为属性
v-text = 'data中的变量' 写在标签上作为属性
常量:字符串常量('字符串') 数字常量(数字) 布尔常量 (true)
v-html = '常量' 写在标签上作为属性
v-text = '常量' 写在标签上作为属性
vue2中 使用v-html和v-text会覆盖掉标签直接的内容( 标签内的内容会忽略)
vue3中,如果使用v-html和v-text,并且标签中有内容,会给你一个提示警告
动态绑定属性:
语法:
v-bind:属性名= "data中的变量"
v-bind:属性名= "常量"
v-bind:src='url'
简写:
:属性名= 'data中的变量'
绑定事件的语法:
v-on:事件类型= "少量的js代码(要求代码是赋值语法)"
v-on:事件类型= "函数名"
v-on:事件类型= "函数名(参数)"
简写:
@事件类型 = "少量的js代码(要求代码是赋值语法)"
@事件类型 = "函数名"
@事件名 = "函数名(参数)"
事件对象如何获取:
如何阻止事件的默认行为 e.preventDefault()
1. 调用时不传参数时,默认就在第一个形参位置就是事件对象
2. 调用时传递参数时,需要手动的 把事件对象$event 放在最后一个参数位置
e.stopPropagation()
事件修饰符:
@事件名.prevent = '事件处理函数'
@事件名.stop = '事件处理函数'
@事件名.prevent.stop = '事件处理函数'
特殊的事件如keyup 事件
按键修改符:
@keyup.enter = '事件处理函数' 抬起时并按下了回车键,就会指向事件处理函数
.enter
.delete (捕获“Delete”和“Backspace”两个按键)
.space (空格键)
.up (上箭头)
.down (下箭头)
.left (左箭头)
.right (右箭头)
配合功能键:
.ctrl 键
.alt 键
.shift 键
.meta 键
需求: 按下enter键的同时按下ctrl键
@keyup.ctrl.enter = ''
条件渲染
v-if
作用:是用来控制标签的显示 和隐藏,
原理:使用的使用js中创建(document.createElement())和删除(ele.remove() ) 耗性能
v-show
作用: 用于控制标签的显示和隐藏
原理: 使用的使用js中display的block和none来控制的
v-if和v-show区别:
原理:
v-if。标签的创建和删除
v-show: 标签显示和隐藏
性能:
1. v-if切换一次就耗费一次性能
2. v-show,只是初始显示时耗费一次性能
安全性(权限控制会体现)
1. v-if要高于v-show
支持写在template标签上
1. v-if支持
2. v-show不支持
优先级
如果v-for的优先级比v-if高,这就意味着v-if将重复的运行于每一个v-for循环中。
vue2中审查元素:v-for的优先级高于v-if
vue3中审查元素:v-if的优先级更高v-for
循环
语法一:遍历数字:
v-for = "item in 数字" :key='唯一的, 有id用id,没有id使用index'
语法二:遍历数组
v-for = "(item,index) in data中的数组" :key='唯一的, 有id用id,没有id使用index'
语法三:遍历对象
v-for = "(value,key) in data中的对象"