vue + component + vue-router + vuex + axios
[ 库 ]:相当于功能比较全的产品 ,直接拿取产品中的一部分使用就可以
[ 框架 ]:为了解决一系列问题而产生的产品,使用时只能按照它的规定来使用 vue 框架: MVVM 模式
- npm init -y 初始化
- npm install vue -D
Mustache(小胡子) 语法
<!-- Mustache 语法
JS 表达式:
1. 变量(data 中已经声明的)
2. 可以运算
3. 三元运算符
4. 函数的返回值
5. 不可以定义变量、赋值、定义函数(只要是 JS 语句都不可以放入里面)
-->
<div id="app">
{{ msg }}
</div>
对象变更检测
- Vue 不能检测对象属性的添加或删除
- Vue 不允许动态添加根级别的响应式属性
// 初始化 Vue 实例
let vm = new Vue({ // vm Vue 的实例
el: '#app', // 把 vue 的实例挂载到 id 名为 app 的 DOM 元素上
data: { // 把数据放入到响应式系统
msg: '我不喜欢这个世界,我只喜欢你!',
obj: {
name: 'serendipity'
},
b: 0,
}
})
// vm.msg == data.msg; 会把 vue 选项中所有的数据挂载到 vm 的实例上
// vm.b = 10 先要在 data 中声明才可以
// 对象变更
// vm.obj.age = 10; 不可以直接更改根级别的对象
vm.$set(vm.obj,'age',10);
// 合并对象
Object.assign(vm.obj, {
age: 27,
favoriteColor: 'Vue Green'
})
数组变更检测
Vue 不能检测以下数组的变动:
- 不可以直接通过索引更改数组,例如:vm.items[indexOfItem] = newValue
- 不可以通过数组的长度更改数组,例如:vm.items.length = newLength
// 初始化 Vue 实例
let vm = new Vue({ // vm Vue 的实例
el: '#app', // 把 vue 的实例挂载到 id 名为 app 的 DOM 元素上
data: { // 把数据放入到响应式系统
arr: [1, 2, 3]
}
})
// 数组更改
// vm.arr[1] = 5; // 不可以索引更改
// vm.arr[vm.arr.length -1 ] = 5; // 不可以数组长度更改
// 方式一:
vm.$set(vm.arr, 4, 12345)
// 方式二: 变异方法
// push()
// pop()
// shift()
// unshift()
// splice()
// sort()
// reverse()
vm.arr.splice(0,1,5) // 开始 个数 替换
/**
* 非变异方法:
* 如:filter()、concat() 和 slice() 它们不会改变原始数组,而总是返回一个新数组。当使用非变异方法时,可以用新数组替换旧数组
*
*/
example1.items = example1.items.filter(function (item) {
return item.message.match(/Foo/)
})
Vue 实例的方法
/**
* Vue 实例方法
*
* vm.$set/vm.$delete 更改对象或数组
* vm.$el 获取挂载的 dom 元素 (知道确切 vue 实例是哪一个)
* vm.$data 获取响应式数据
* vm.$options 所有的选项
* vm.$watch 监视数据的变化
* vm.$nextTick 获取真实的 dom 元素
* vm.$mount 设置 vue 实例挂载的 dom 元素()
*
*
*/
let vm = new Vue({
// el: '#app',
data: {
arr: [1,2,3,4,5],
msg: '我不喜欢这个世界,我只喜欢你!'
}
})
vm.$mount('#app')
vm.$watch('msg',function(newVal,oldVal){ // 异步
console.log('现在的值是:'+ ' ' + newVal);
})
vm.msg = '时光静好,岁月安然!';
// console.log(vm.$el.innerHTML); // 同步的 所以先执行
vm.$nextTick(function(){ // 触发 表示 dom 渲染完成
console.log(vm.$el.innerHTML); // 数据更改完成后 dom
})