一.在IDEA中编写需添加Vue插件。
路径:settings-->plugins-->vue;
二.导入Vue.js
//联网导入Vue.js
<script src = "https://cdn.jsdeliver.net/npm/vue@2.5.21/dist/vue.min.js"></script>
//本地导入Vue.js
<script src = "../demo/vue.js"></script>//路径为Vue.js的本地路径
三.Hello,Vue
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id = "app">
{{message}}
</div>
<script src = "../demo/vue.js"></script>
<script>
var vm = new Vue({
el:"#app",
data:{
message:"Hello,Vue!"
}
});
</script>
</body>
</html>
四.Vue基础语法
<1>判断循环--if
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id = "app">
<h1 v-if="type==='A' ">A</h1>
<h1 v-else-if="type==='B'">B</h1>
<h1 v-else-if="type==='C'">C</h1>
<h1 v-else>D</h1>
</div>
<script src = "../chapter-1/vue.js"></script>
<script>
var vm = new Vue({
el:"#app",
data:{
type:'A'
}
});
</script>
</body>
</html>
<2>判断循环--for
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id = "app">
<li v-for="item in items">
{{item.message}}
</li>
</div>
<script src = "../chapter-1/vue.js"></script>
<script>
var vm = new Vue({
el:"#app",
data:{
items:[
{message:'first'},
{message:'second'},
{message:'third'}
]
}
});
</script>
</body>
</html>
<3>时间处理--on
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id = "app">
<button v-on:click="sayHi">click</button>
</div>
<script src = "../chapter-1/vue.js"></script>
<script>
var vm = new Vue({
el:"#app",
data:{
message:"your data"
},
methods:{//方法必须定义在Vue的Methods对象中
sayHi:function (){
alert(this.message);
}
}
});
</script>
</body>
</html>
其余语法详情见官方文档Vue官方网站--Vue.js
五.Vue的双向绑定
1.什么是双向数据绑定
Vue.js是一个MVVM框架,即数据双向绑定,即当数据发生变化的时候,视图也就发生变化,当视图发生变化的时候,数据也会跟着同步变化。
2.为什么要实现数据的双向绑定
在Vue.js中,如果使用vuex,实际上数据还是单向的,之所以说是数据双向绑定,这是用的UI控件来说,对于我们处理表单,Vue.js的双向数据绑定用起来更适合。俩者互不相斥,在全局性数据流使用单项,方便追踪;局部数据流使用双向,简单易操作。
3.在表单中使用双向数据绑定
可以使用v-model指令在表单<input>、<textarea>以及<select>元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。v-model负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。注意:v-model会忽略所有表单元素的value、checked、selected特性的初始值而总是将Vue实例的数据作为数据来源。应该通过JavaScript在组件的data选项中声明初始值!
4.示例demo
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id = "app">
下拉框:
<select v-model="selected">
<option value="" disabled>--请选择--</option>
<option>A</option>
<option>B</option>
<option>C</option>
<option>D</option>
</select>
<span>value:{{selected}}</span>
文本框:
<textarea name="" id="" cols="30" rows="10" v-model="message"></textarea>
value:{{message}}
</div>
<script src = "../chapter-1/vue.js"></script>
<script>
var vm = new Vue({
el:"#app",
data:{
selected:'',
message:"123"
}
});
</script>
</body>
</html>
六.Vue的组件
1.什么是组件
组件是可复用的Vue实例,是一组可以重复使用的模板,通常一个应用会以一颗嵌套的组件树的形式来组织。
例如:一个页面会有页头、侧边栏、内容区等组件,每个组件又包含其他的组件。
2.示例demo
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id = "app">
<change v-for="item in items" v-bind:one="item"></change>
</div>
<script src = "../chapter-1/vue.js"></script>
<script>
//定义一个Vue组件component
Vue.component("change",{
props:['one'],
template:'<li>{{one}}</li>'
});
var vm = new Vue({
el:"#app",
data:{
items:["first","second","third"]
}
});
</script>
</body>
</html>
Vue.component():注册组件;
my-componnet-li:自定义组件的名字;
template:组件的模板;
3.解释
注意:使用props属性传递参数,默认规则下props属性里的值不能为大写。
v-for"item in items":遍历Vue实例中定义的名为items的数组,并创建同等数量的组件。
v-bind:item="item":将遍历的item项绑定到组件中props定义的名为item属性上;=号左边的item为props定义的属性名,右边的为item in items中遍历的item项的值。
七.Vue:Axios异步通信
1.什么是Axios
Axios是一个开源的可以在浏览器端和Node.js的异步通信框架,它的主要作用就是实现AJAX异步通信,其功能特点如下:
1.从浏览器中创建XMLHttpRequests
2.从node.js创建HTTP请求
3.支持Promise API [ JS中链式编程 ]
4.拦截请求和响应
5.转换请求数据和响应数据
6.取消请求
7.自动转换JSON数据
8.客户端支持防御XSRF(跨站请求伪造)
Axios中文文档
2.为什么要使用Axios?
由于Vue.js是一个视图层框架,且严格遵守SOC(关注度分离原则),所以Vue.js并不包含AJAX的通信功能,为了解决通信问题,引入Axios。
3.Vue生命周期
4.Axios相关demo
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--取消闪烁-->
<style>
[v-clock]{
display:none;
}
</style>
</head>
<body>
<div id="app" v-clock>
<div>{{info.name}}</div>
<div>{{info.address.country}}</div>
<a v-bind:href="info.url">click</a>
</div>
<!--导入JS文件-->
<script src="../chapter-1/axios.js"></script>
<script src = "../chapter-1/vue.js"></script>
<script type="text/javascript"></script>
<script>
var vm = new Vue({
el:"#app",
//data:属性,data()是方法
data(){
return{
//请求的返回参数类型,必须和JSON字符串一样
info:{
name:null,
address:{
street:null,
city:null,
country:null
},
url:null
}
}
},
mounted(){//钩子函数,链式编程,ES6特性
axios.get('../data.json').then(response=>(this.info=response.data));
}
});
</script>
</body>
</html>
八.Vue:计算属性、内容分发、自定义事件
1.1什么是计算属性
计算属性的重点突出在属性上。首先它是属性,其次属性有计算能力(计算指函数),即他是一个能够计算结果缓存起来的属性(将行为转化成了静态的属性),可以理解为缓存。
1.2示例Demo(方法methods与计算属性computed的区别)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--取消闪烁-->
<style>
[v-clock]{
display:none;
}
</style>
</head>
<body>
<div id="app">
<p>currentTime1{{currentTime1()}}</p>
<p>currentTime2{{currentTime2}}</p>
</div>
<!--导入JS文件-->
<script src="../chapter-1/axios.js"></script>
<script src = "../chapter-1/vue.js"></script>
<script type="text/javascript"></script>
<script>
var vm = new Vue({
el:"#app",
data:{
message:"hello,vue"
},
methods:{
currentTime1:function (){
return Date.now();//返回一个时间戳
}
},
computed:{//计算属性:methods属性与computed的方法可以重名,重名之后,只会调用methods的方法
currentTime2:function (){
this.message;
return Date.now()
}
}
});
</script>
</body>
</html>
1.3结论
调用方法时,每次都需要进行计算,既然有计算过程则必定产生系统开销,如果这个结果是不经常变化的,就可以考虑将这个结果缓存起来,计算属性的主要特性就是为了将不经常变化的计算结果进行缓存,以节约我们的系统开销。
2.1内容分发
在Vue.js中我们使用<slot>元素作为承载分发内容的出口,称其为插槽,可以应用在组合组件的场景中;
2.2示例demo
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--视图模板,view层-->
<div id="app">
<first>
<second slot="second" :title="title"></second>
<third slot="third" v-for="item in allItems" :item="item"></third>
</first>
</div>
<!--导入JS文件-->
<script src = "../chapter-1/vue.js"></script>
<script>
//slot:插槽
Vue.component("first",{
template: '<div>\
<slot name="second"></slot>\
<ul>\
<slot name="third"></slot>\
</ul>\
</div>'
});
Vue.component("second",{
props:['title'],
template: '<div>{{title}}</div>'
});
Vue.component("third",{
props: ['item'],
template:'<li>{{item}}</li>'
});
var vm = new Vue({
el:"#app",
data:{
title:"computer",
allItems:['JAVA','C++','python']
}
});
</script>
</body>
</html>
3自定义事件
在组件中调用组件外的方法。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--视图模板,view层-->
<div id="app">
<first>
<second slot="second" :title="title"></second>
<third slot="third" v-for="item in allItems" :item="item"
v-bind:aria-colindex="index" v-on:remove="removeItems(index)" :key="index"></third>
</first>
</div>
<!--导入JS文件-->
<script src = "../chapter-1/vue.js"></script>
<script>
//slot:插槽
Vue.component("first",{
template: '<div>\
<slot name="second"></slot>\
<ul>\
<slot name="third"></slot>\
</ul>\
</div>'
});
Vue.component("second",{
props:['title'],
template: '<div>{{title}}</div>'
});
Vue.component("third",{
props: ['item'],
template:'<li>{{index}}-->{{item}} <button @click="remove">delete</button></li> ',
methods:{
remove:function (index){
this.$emit('remove',index);
}
}
});
var vm = new Vue({
el:"#app",
data:{
title:"computer",
allItems:['JAVA','C++','python']
},
methods: {
removeItems:function (index){
console.log("delete#" + this.allItems[index] + "sucess");
this.allItems.splice(index,1);//一次删除一个元素
}
}
});
</script>
</body>
</html>
九.第一个vue-cli项目
1.什么是vue-cli
vue-cli是官方提供的一个脚手架,用于快速生成一个Vue的项目模板;
主要的功能:
1.统一的目录结构,
2.本地调试,
3.热部署,
4.单元测试,
5.集成打包上线
需要的环境:Node.js:Node.js下载
win+r 输入cmd。
第一步:node -v
查询版本以及环境配置npm -v
第二步:npm install cnpm -g
第三步:cnpm install vue-cli -g
第四步:vue list
在创建Vue项目若出现以下错误vue-cli · Failed to download repo vuejs-templates/webpack: connect ETIMEDOUT 20.205.243.166:443
解决方法