Vue基本用法
前置知识
什么是Vue
中文官网 Vue是一种渐进式JavaScript框架
声明式渲染 -> 组件系统 -> 客户端路由 -> 集中式状态管理 -> 项目构建
<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<!-- 生产环境版本,优化了尺寸和速度 -->
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<!-- 引入 axios -->
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<!-- 引入 qs -->
<script src="https://cdn.bootcss.com/qs/6.5.1/qs.min.js"></script>
const qs = Qs // 引入QS库把请求参数转成表单形式
axios.defaults.timeout = 3000; // 设置超时时间
// 设置请求的基准URL地址
axios.defaults.baseURL = 'http://localhost:8080/';
// 使请求可以携带 Cookie
axios.interceptors.request.use(config => {
config.withCredentials = true;
return config;
});
new Vue({
el: '#app',
data() {
return {
username: '',
password: ''
}
},
methods: {
login() {
axios.post('/login', qs.stringify({
username: this.username,
password: this.password
}), {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
})
.then((result) => {
console.log(result);
}).catch((err) => {
console.log(err);
});
}
},
})
生命周期(钩子函数)
Vue的生命周期
其中红色部分都是可以插入钩子的地方
参考自官方文档
- 挂载(初始化相关属性)
| 时期 | 作用 |
|---|---|
| beforeCreate | 在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。 |
| create | 在实例创建完成后被立即调用。$el 属性 还尚不可用 |
| beforeMount | 在挂载开始之前被调用:相关的 回调函数 首次被调用。 |
| mounted | 实例被挂载后调用,这时 el 被新创建的 vm.$el 替换了。并挂载到实例上去之后调用该钩子 |
- 更新(元素或组件的变更操作)
| 时期 | 作用 |
|---|---|
| beforeUpdate | 数据更新时调用,发生在虚拟 DOM 打补丁之前。 |
| update | 由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。(数据已经更新了) |
- 销毁(销毁相关属性)
| 时期 | 作用 |
|---|---|
| beforeDestroy | 实例销毁之前调用。在这一步,实例仍然完全可用。 |
| destroy | 实例销毁后调用。该钩子被调用后,对应 Vue 实例的所有指令都被解绑,所有的事件监听器被移除,所有的子实例也都被销毁。 |
什么是MVVM
原本的 MVC 是以下的模式

而 MVVM 是 MVC 的一种变体
M:Model V:View VM:ViewModel

在MVVM架构里是不允许数据和视图直接通信的,只能通过ViewModel来通信,而ViewModel就是定义了一个Observer观察者
- ViewModel能够观察到数据的变化,并对视图对应的内容进行更新
- ViewModel能够监听到视图的变化,并能够通知数据发生改变
实际上就是类似于AndroidStudio那样的数据绑定机制,亦或者说类似于Spring的IOC概念意义,在需要数据的地方使用ViewModel,从而方便传入数据,而无需手动的传入数据
vue各版本的区别
# 压缩后的代码
vue.min.js
# 可看的源码(开发版,有完整的提示信息)
vue.js
vue主要的属性
el 挂载点
el 挂载点 用来绑定 DOM,Vue 会管理 el 选择命中的元素及其内部的后代元素 使用的语法和 css 是一样的,但是注意不可以在 body 和 html 标签上使用,但是可以挂载在其他的元素上
<div id="app"></div>
<script>
let vm = new Vue({
el: '#app'
})
</script>
data 数据
用来填充数据,data 中可以写复杂类型的数据(数组,对象等) 渲染复杂类型数据时,遵守 JS 的语法即可 要读取数据就直接读取 data 里的属性就好了
<script>
let vm = new Vue({
el: '#app',
data: {
type: 'A'
},
})
</script>
method
这里面写绑定的方法
<body>
<div id="app">
<button v-on:click="sayhell">click this</button>
<!-- 或者直接调用 -->
{{sayhell()}}
</div>
<script src="/node_modules/vue/dist/vue.min.js"></script>
<script>
let vm = new Vue({
el: '#app',
methods: {
sayhell: function () {
console.log('hello');
}
},
})
</script>
</body>
内容绑定,事件绑定
v-text 插入文本
设置标签的文本值(textContent)
简写就是{{msg}}
<div id='app'>
<h2 v-text="message + '这是字符串拼接'"></h2>
</div>
let app = new Vue({
el:'#app',
data: {
message: 'hello vue'
}
})
实际上直接用{{msg}}也可以
<div id='app'>
<h2>
{{message + "这是字符串拼接"}}
</h2>
</div>
v-html 插入标签
设置标签的innerHTML
如果只是插入普通文本则与上面的v-text属性没有区别,但是插入标签的话必须用这个v-html否则解析不出来
<div id='app'>
<p v-html="message"></p>
</div>
let app = new Vue({
el:'#app',
data: {
message: '<h1>hello vue </h1>'
}
})
v-on 绑定事件
为元素绑定事件(就是监听事件)
语法:
<div id='app'>
<input type="button" value="按钮名称" v-on:事件名="方法">
</div>
v-on可以简写使用 @ 字符
例如
<input type="button" value="按钮名称" @click="方法">
let app = new Vue({
el:'#app',
data: {
food: '西兰花'
},
methods: {
方法: function(){
/**
如果想在方法里修改某些属性值则使用this指针,
因为本质上一个Vue就是一个对象,所以通过this指针来提高作用域
Vue里的this有点特殊,后面讲
*/
this.food = '青瓜'
}
}
})
常用的事件:
| 事件名 | 作用 |
|---|---|
| click | 点击 |
| monseenter | 鼠标移动 |
| dblclick | 鼠标双击 |
参数:event
用在普通元素上时,只能监听原生 DOM 事件。用在自定义元素组件上时,也可以监听子组件触发的自定义事件。