如下图所示,数据的双向绑定就是基于MVVM的思想,在View和Model中间搭建了一个ViewModel的桥梁,View和Model两者只要一方发生改变,另一方就能通过ViewModel接收到改变的信号从而根据对方改变的数据而进行改变
vue.js是vue官方的一个文件,要想使用vue框架,必须引入这个文件
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
在script代码块中新建一个vue的对象,在这个新建的对象中传递两个属性,el和data,el代表vue要控制哪个区域,data则定义了数据模型
<script>
//定义vue对象
new Vue({
el:'#app',//vue接管区域
data:{
message:'hello vue'
}
})
</script>
这里使用到了一个插值表达式{{表达式}}
内容可以是
<div id="app">
<input type="text" v-model="message">
{{message}}
</div>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>vue快速入门</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
</head>
<body>
<div id="app">
<input type="text" v-model="message">
{{message}}
</div>
<script>
//定义vue对象
new Vue({
el:'#app',//vue接管区域
data:{
message:'hello vue'
}
})
</script>
</body>
</html>
在网页中打开就像这样
v-model进行了数据的双向绑定,所以能展现出来
这个代码语法是vue2版本的,所以记得用2版本的引用!
指令 | 作用 |
---|---|
v-bind | 为HTML标签绑定属性值,如设置href,css样式等 |
v-model | 在表单元素上创建双向数据绑定 |
v-on | 为HTML标签绑定事件 |
v-if/else-if/else | 条件性的渲染某元素,判定为true时渲染,否则不渲染 |
v-show | 根据条件展示某元素,区别在于切换的是display属性的值 |
v-for | 列表渲染,遍历容器的元素或者对象的属性 |
为HTML标签绑定属性值,如设置href,css样式等
链接1和2的区别在于v-bind可简写,但是冒号不可省略
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>v-bind指令</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
</head>
<body>
<div id="app">
<a v-bind:href="url">链接1</a>
<a :href="url">链接2</a>
</div>
<script>
//定义vue对象
new Vue({
el:'#app',//vue接管区域
data:{
url:"https://www.baidu.com"
}
})
</script>
</body>
</html>
在表单元素上创建双向数据绑定
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>v-bind指令</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
</head>
<body>
<div id="app">
<a v-bind:href="url">链接1</a>
<a :href="url">链接2</a>
<!-- v-model -->
<input type="text" v-model="url">
</div>
<script>
//定义vue对象
new Vue({
el:'#app',//vue接管区域
data:{
url:"https://www.baidu.com"
}
})
</script>
</body>
</html>
注意:通过v-bind或者v-model绑定的变量,必须在数据模型中声明,否则打开f12会提示没有这么个url
为HTML标签绑定事件
v-on:d等同于@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>v-on指令</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
</head>
<body>
<div id="app">
<input type="button" value="点一下试试呢" v-on:click="handle">
</div>
<script>
//定义vue对象
new Vue({
el: "#app", //vue接管区域
data: {},
methods: {
handle: function () {
alert("不许点!");
},
},
});
</script>
</body>
</html>
v-if/else-if/else
v-show
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>v-if指令</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
</head>
<body>
<div id="app">
年龄<input type="text" v-model="age">经判定,为:
<span v-if="age<=35">年轻人(35岁及以下)</span>
<span v-else-if="age>35 && age<60">中年人(35-60)</span>
<span v-else>老年人(60及以上)</span>
<br>
年龄<input type="text" v-model="age">经判定,为:
<span v-show="age<=35">年轻人(35岁及以下)</span>
<span v-show="age>35 && age<60">中年人(35-60)</span>
<span v-show="age>=60">老年人(60及以上)</span>
</div>
<script>
//定义vue对象
new Vue({
el:'#app',//vue接管区域
data:{
age:20
}
})
</script>
</body>
</html>
列表渲染,遍历容器的元素或者对象的属性
v-for=“遍历出来的元素,固定关键字in,指定遍历的数组”
遍历的索引从0开始
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>v-for指令</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
</head>
<body>
<div id="app">
<div v-for="addr in addrs">{{addr}}</div>
<hr>
<div v-for="(addr,index) in addrs">{{index}}:{{addr}}</div>
</div>
<script>
//定义vue对象
new Vue({
el:'#app',//vue接管区域
data:{
addrs:['烤鸭','炸鸡','黄焖鸡','口水鸡','铁锅炖大鹅']
},
methods:{
}
})
</script>
</body>
</html>
生命周期:指一个对象从创建到销毁的整个过程
一共有八个阶段,每触发一个生命周期事件,会自动执行一个生命周期方法(钩子)
状态 | 创建周期 |
---|---|
beforeCreate | 创建前 |
created | 创建后 |
beforeMount | 挂载前 |
mounted | 挂载完成 |
beforeUpdate | 更新前 |
updated | 更新后 |
beforeDestroy | 销毁前 |
destroved | 销毁后 |
我们最主要掌握mounted 方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>v-指令</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
</head>
<body>
<div id="app">
</div>
<script>
//定义vue对象
new Vue({
el:'#app',//vue接管区域
data:{
},
mounted(){
alert('Vue挂载完毕,发送请求获取数据');
},
methods:{
}
})
</script>
</body>
</html>
作用
不重新加载整个页面
的情况下,与服务器交换数据并更新部分网页
的技术,如: 搜索联想、用户名是否可用的校验等等。对原生的Ajax及逆行封装,简化书写,快速开发
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
.then后面是成功回调函数,可以打开网页的f12模式看输出控制台
url网址内容已经不可访问了,可以自行在idea内写一个get】post请求访问的页面进行访问测试,这边只是讲一下格式问题
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ajax-axios</title>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
<input type="button" value="获取数据get" onclick="get()">
<input type="button" value="删除数据post" onclick="post()">
<script>
function get(){
// 通过axios发送异步请求get
axios({
method:'get',
url:'http://yapi.smart-xwork.cn/mock/169327/emp/list'
}).then(result=>{
console.log(result.data);
})
}
function post(){
// 通过axios发送异步请求post
axios({
method:'post',
url:'http://yapi.smart-xwork.cn/mock/169327/emp/deleteById',
data:'id=1'
}).then(result=>{
console.log(result.data);
})
}
</script>
</body>
</html>
function get() {
// 通过axios发送异步请求get
axios
.get("http://yapi.smart-xwork.cn/mock/169327/emp/list")
.then((result) => {
console.log(result.data);
});
}
function post() {
// 通过axios发送异步请求post
axios
.post("http://yapi.smart-xwork.cn/mock/169327/emp/deleteById", "id=1")
.then((result) => {
console.log(result.data);
});
}
前篇博客有讲,可以点击看一下->NodeJS安装极速版
npm install -g @vue/cli
未完待续,也可能不续了(?д?;?)