vue2-基础部分
文章目录
一:VUE概述
vue -> 一套用于构建用户界面的渐进式JS框架
所谓渐进式 -> vue可以自底向上逐层的应用,对于简单应用,只需要核心库;对于复杂应用,可以引入各式各样的vue插件
1:vue作者-尤雨溪

2:vue的特点
采用组件化的模式, 提高代码的复用率,且让代码更好的进行维护

声明式编码,让编码人员无需直接操作dom,提高开发效率

使用虚拟DOM + Diff算法,尽量复用DOM节点

3:需要掌握的前置JS知识
- ES6语法规范
- ES6模块化(export & import)
- 包管理器(npm)
- 原型,原型链(proto)
- 数组的常用方法(array…)
- axios(异步请求)
- promise(异步方法)
- …
4:Hello Vue
可以在vue的官网上下载对应的安装包(https://v2.cn.vuejs.org/v2/guide/installation.html)
也可以使用cdn加速的网址引入vue(https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.js)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script src="../js/vue.min.js"></script>
</head>
<body>
<div id="app">
<h1>{{ message }}</h1>
</div>
<script>
let vm = new Vue({
el: "#app",
data: {
message: "Hello World"
}
})
</script>
</body>
</html>
二:选项式API
每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的:
let vm = new Vue({
// 选项
})
虽然没有完全遵循 MVVM 模型,但是 Vue 的设计也受到了它的启发。
因此,在文档中经常会使用 vm (ViewModel 的缩写) 这个变量名表示 Vue 实例。
当创建一个 Vue 实例时,你可以传入一个选项对象。
选项对象由数据、DOM、生命周期钩子、资源、组合、以及其它对象组成。
1:el
指定挂载的目标容器,可以是一个css选择器的字符串,也可以是dom HTMLElement实例,只在用new创建实例时生效
在实例挂载之后,元素可以使用vm.$el进行访问
let vm = new Vue({
el: "#app" // 指定挂载目标是id = app的容器
})
console.log(vm.$el) // ==> div#app对象
2:data
定义数据用的,值必须是一个函数function/object
Vue 将会递归将 data 的 property 转换为 getter/setter,从而让 data 的 property 能够响应数据变化
浏览器 API 创建的原生对象,原型上的 property 会被忽略。实例创建之后,可以通过 vm.$data 访问原始数据对象。
Vue 实例也代理了 data 对象上所有的 property,因此访问 vm.a 等价于访问 vm.$data.a
以 _ 或 $ 开头的 property 不会被 Vue 实例代理,因为它们可能和 Vue 内置的 property、API 方法冲突,你可以使用例如 vm.$data._property 的方式访问这些 property
当一个组件被定义,data 必须声明为返回一个初始数据对象的函数,因为组件可能被用来创建多个实例。如果 data 仍然是一个纯粹的对象,则所有的实例将共享引用同一个数据对象
通过提供 data 函数,每次创建一个新实例后,我们能够调用 data 函数,从而返回初始数据的一个全新副本数据对象。如果需要,可以通过将 vm.$data 传入 JSON.parse(JSON.stringify(...)) 得到深拷贝的原始数据对象。
let data = {a: 1}
let vm = new Vue({
data: data
})
console.log(vm.a)// ==> 1
console.log(vm.$data == data)// ==> true
// Vue.extend() 中 data 必须是函数
let Component = Vue.extend({
data: function () {
return {a: 1}
}
})
// ES6提供了另外一种简写的方式
let Component = Vue.extend({
data() {
return {a: 1}
}
})
3:method
方法在这定义,是一个key=string,值是function的选项
methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。
方法中的 this 自动绑定为 Vue 实例。
注意,不应该使用箭头函数来定义 method 函数。理由是箭头函数绑定了父级作用域的上下文,所以 this 将不会按照期望指向 Vue 实例
plus: () => this.a++ // this将会是undefined
let vm = new Vue({
data: {a: 1},
methods: {
plus: function () {
this.a++
}
}
})
vm.plus()
console.log(vm.a)// 2
// ES6提供了另外一种简写的方式
let vm = new Vue({
data: {a: 1},
methods: {
plus() {
this.a++
}
}
})
vm.plus()
console.log(vm.a)// 2
4:watch
一个对象,键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象
Vue 实例将会在实例化时调用 $watch(),遍历 watch 对象的每一个 property
同样不要在watch中使用箭头函数,原因和method一样。
let vm = new Vue({
data: {
a: 1,
b: 2,
c: 3,
d: 4,
e: 5,
f: {
g: 6
}
},
methods: {
someMethod: function (newVal, oldVal) {
console.log("new: %s, old: %s someMethod...", newVal, oldVal)
}
},
watch: {
// 值可以是方法, 当a发生改变的时候,触发这个函数,两个参数分别是新的值和旧的值
a: function (newVal, oldVal) {
console.log("new: %s, old: %s method...", newVal, oldVal)
},
// 值可以是方法名,当b发生改变的时候,触发someMethod这个函数
b: "someMethod",
// 该回调会在任何被侦听的对象的 property 改变时被调用
// deep:true -> 不论其被嵌套多深
c: {
deep: true,
handler: function (newVal, oldVal) {
console.log("new: %s, old: %s deep...", newVal, oldVal)
}
},
// 该回调将会在侦听开始之后被立即调用
// immediate: true -> 立刻被调用
d: {
immediate: true,
handler: function (newVal, oldVal) {
console.log("new: %s, old: %s immediate...", newVal, oldVal)
}
},
// 你可以传入回调数组,它们会被逐一调用(handler1 -> handler2 -> handler3)
e: [
function handle1(newVal, oldVal) {
console.log("new: %s, old: %s handle1...", newVal, oldVal)
},
function handle2(newVal, oldVal) {
console.log("new: %s, old: %s handle2...", newVal, oldVal)
},
function handle3(newVal, oldVal) {
console.log("new: %s, old: %s handle3...", newVal, oldVal)
}
],
// 你可以观察一个对象的某一个属性值
'f.g': function (newVal, oldVal) {
console.log("new: %s, old: %s f.g...", newVal, oldVal)
}
}
})
vm.a = 11
vm.b = 22
vm.c = 33
vm.d = 44
vm.e = 55
vm.f.g = 66
5:computed
计算属性将被混入到 Vue 实例中。所有 getter 和 setter 的 this 上下文自动地绑定为 Vue 实例。
如果你为一个计算属性使用了箭头函数,则 this 不会指向这个组件的实例,但你仍可以将其实例作为函数的第一个参数来访问。
computed: {
aDouble: vm => vm.a * 2
}
计算属性的结果会被缓存,除非依赖的响应式 property 变化才会重新计算。
注意,如果某个依赖 (比如非响应式 property) 在该实例范畴之外,则计算属性是不会被更新的。
计算属性默认只有 getter,不过在需要时你也可以提供一个 setter。
let vm = new Vue({
data: {a: 1},
computed: {
// 仅读取
aDouble: function () {
return this.a * 2
},
// 读取和设置
aPlus: {
get: function () {
return this.a + 1
},
set: function (v) {
this.a = v - 1
}
}
}
})
console.log(vm.aPlus) // => 2
vm.aPlus = 3
console.log(vm.a) // => 2
console.log(vm.aDouble) // => 4
962

被折叠的 条评论
为什么被折叠?



