1.vue.js就是MVVM中的ViewModel层的实现者
2.用html引入vue:
1.新建一个项目文件夹“第一个Vue应用程序” 2.在文件夹下新建一个index.html
3.index.htm内容:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <!-- 开发环境版本,包含了有帮助的命令行警告 --> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><!--引入vue.js--> <title>第一个Vue应用程序</title> </head> <body> <!--MVVM中,view层只能通过viewmodel来对接model,即只能展示viewmodel中的内容,不能直接展示model中的内容--> <!--view展示层--> <div id="app"> {{ message }} <!--显示data中的数据--> </div> <!--viewmodel脚本控制层--> <script> //Vue(),就是viewModel层的内容 var app = new Vue({ el: '#app', //el为element的缩写,挂载元素 data: { //这个data,就是model层,即数据内容 message: 'Hello Vue!' } }) </script> </body> </html>
4.在浏览器中访问这个index.html的文件路径,即可展示内容
5.展示数据绑定的内容:
1.打开浏览器访问index.html 2.按F12,开始调试 3.在控制台输入:app.message='Hello!' 4.按回车键 5.页面中“Hello Vue!”变为“Hello!” 6.即为数据绑定
6.Edge浏览器安装Vue.js devtools插件:https://blog.csdn.net/sinat_31213021/article/details/120036139
7.安装了插件后,在打开VUE项目后,按F12 ,就可以找到Vue,然后在Root->data->Message中编辑Message的数据
8.vue的生命周期图:https://cn.vuejs.org/v2/guide/instance.html#%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E5%9B%BE%E7%A4%BA
1.new Vue()到created之间时是初始化一些内容,
2.created之后就会将data中的数据绑定到div层中,
3.之后会进行mounted(构造函数,进行一些ajax请求),
4.然后进行一系统处理之后
5.可以进入销毁
9.条件渲染:
1.在“第一个vue应用程序"文件夹下创建if-else.html 2.if-else.html内容: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <!-- 开发环境版本,包含了有帮助的命令行警告 --> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><!--引入vue.js--> <title>条件渲染</title> </head> <body> <!--MVVM中,view层只能通过viewmodel来对接model,即只能展示viewmodel中的内容,不能直接展示model中的内容--> <!--view展示层--> <div id="app"> <!--显示data中的数据--> <!--显示层使用v-if和v-else属性内容来作为if和else逻辑的显示--> <!--如果变量awesome的值为true,则返回v-if层的内容,为false,则返回v-else的内容--> <h1 v-if="awesome">Vue is awesome!</h1> <h1 v-else>Oh no 😢</h1> </div> <!--viewmodel脚本控制层--> <script> //Vue(),就是viewModel层的内容 var app = new Vue({ el: '#app', //el为element的缩写,挂载元素 data: { //这个data,就是model层,即数据内容 awesome: true } }) </script> </body> </html>
10.vux2.1中新增加else-if语句
1.在“第一个vue应用程序"文件夹下创建else-if.html 2.else-if.html内容: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <!-- 开发环境版本,包含了有帮助的命令行警告 --> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><!--引入vue.js--> <title>连续判断</title> </head> <body> <!--MVVM中,view层只能通过viewmodel来对接model,即只能展示viewmodel中的内容,不能直接展示model中的内容--> <!--view展示层--> <div id="app"> <!--显示data中的数据--> <!--显示层使用v-if和v-else属性内容来作为if和else逻辑的显示--> <!--如果变量awesome的值为true,则返回v-if层的内容,为false,则返回v-else的内容--> <!--要用div包裹,使用type定义值--> <div v-if="type === 'A'"> A </div> <div v-else-if="type === 'B'"> B </div> <div v-else-if="type === 'C'"> C </div> <div v-else> Not A/B/C </div> </div> <!--viewmodel脚本控制层--> <script> //Vue(),就是viewModel层的内容 var app = new Vue({ el: '#app', //el为element的缩写,挂载元素 data: { //这个data,就是model层,即数据内容 type: 'A' } }) </script> </body> </html>
11.列表渲染
1.在“第一个vue应用程序"文件夹下创建for.html 2.for.html内容: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <!-- 开发环境版本,包含了有帮助的命令行警告 --> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><!--引入vue.js--> <title>连续判断</title> </head> <body> <!--MVVM中,view层只能通过viewmodel来对接model,即只能展示viewmodel中的内容,不能直接展示model中的内容--> <!--view展示层--> <div id="app"> <!--显示data中的数据--> <!--用ul来做父层,用li来做子层,用到v-for--> <!--v-for 指令需要使用 item in items 形式的特殊语法,其中 items 是源数据数组,而 item 则是被迭代的数组元素的别名。--> <!--用:key来绑定一个item的值,用message来定义item的属性值--> <ul id="example-1"> <li v-for="item in items"> {{ item.message }} </li> </ul> </div> <!--viewmodel脚本控制层--> <script> //Vue(),就是viewModel层的内容 var app = new Vue({ el: '#example-1', //el为element的缩写,挂载元素,#表示引用的是id值 data: { //这个data,就是model层,即数据内容 items: [ { message: 'Foo' }, { message: 'Bar' } ] } }) </script> </body> </html>
12.事件处理v-on
1.在“第一个vue应用程序"文件夹下创建on.html 2.on.html内容: <!DOCTYPE html> <html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml"><!--使用v-on,要导入此行--> <head> <meta charset="UTF-8"> <!-- 开发环境版本,包含了有帮助的命令行警告 --> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><!--引入vue.js--> <title>事件处理</title> </head> <body> <!--MVVM中,view层只能通过viewmodel来对接model,即只能展示viewmodel中的内容,不能直接展示model中的内容--> <!--view展示层--> <div id="app"> <!--显示data中的数据--> <div id="example-2"> <!-- `greet` 是在下面定义的方法名 ,需要在methods中定义一个方法--> <button v-on:click="greet">Greet</button> </div> </div> <!--viewmodel脚本控制层--> <script> //Vue(),就是viewModel层的内容 var app = new Vue({ el: '#example-2', //el为element的缩写,挂载元素,#表示引用的是id值 data: { //这个data,就是model层,即数据内容 name:"vue.js" }, // 在 `methods` 对象中定义方法 methods: { greet: function () { // `this` 在方法里指向当前 Vue 实例 alert('Hello ' + this.name + '!') } } }) </script> </body> </html>
13.Axios实现异步通信,主要用来实现AJAX异步通信:
Axios官网:http://www.axios-js.com/zh-cn/docs/ 使用Axios: 1.新建一个项目文件夹“Axios应用程序” 2.在项目文件夹下新建一个data.json 3.data.json文件内容:
{
"name":"你好",
"url":"http://www.baidu.com",
"links": [
{
"name":"Google",
"url":"http://www.google.com"
},
{
"name":"Baidu",
"url":"http://www.baidu.com"
},
{
"name":"Sougou",
"url":"http://www.sougou.com"
}
]
}
4.在项目文件夹下新建一个index.html
5.index.html的内容:
<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml"> <!--使用v-bind事件要导入此内容-->
<head>
<meta charset="UTF-8">
<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><!--引入vue.js-->
<script src="https://unpkg.com/axios/dist/axios.min.js"></script> <!--引入axios.js-->
<title>Axios应用程序</title>
</head>
<body>
<!--MVVM中,view层只能通过viewmodel来对接model,即只能展示viewmodel中的内容,不能直接展示model中的内容-->
<!--view展示层-->
<div id="app">
<!--显示data中的数据-->
<div>
名称:{{info.name}}
</div>
<div>
<!--用v-bind来动态绑定一个属性,如href-->
<!--target="_blank",表示点击标签a时,打开一个新的页面-->
url:<a v-bind:href="info.url" target="_blank">{{info.url}}</a>
</div>
<ul>
<!--用v-for,来读取info中的links的内容-->
<li v-for="link in info.links">
{{link.name}}--->{{link.url}}
</li>
</ul>
</div>
<!--viewmodel脚本控制层-->
<script>
//Vue(),就是viewModel层的内容
var app = new Vue({
el: '#app', //el为element的缩写,挂载元素
data(){ //这个data,就是model层,即数据内容
return{ //用return返回一个数据
info:{
name:'',
url:'',
links:[]
}
}
},
//使用axios发送请求
mounted(){
axios.get('data.json') //通过axios的get函数获取一个路径
.then(response=>this.info=response.data) //then是一个自动转换,将响应到的数据中的data赋值给定义的info
}
})
</script>
</body>
</html>
14.表单输入双向绑定
1.新建一个项目文件夹“表单输入绑定” 2.在“表单输入绑定"文件夹下创建index.html 3.index.html内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><!--引入vue.js-->
<title>表单输入绑定</title>
</head>
<body>
<!--MVVM中,view层只能通过viewmodel来对接model,即只能展示viewmodel中的内容,不能直接展示model中的内容-->
<!--view展示层-->
<div id="app">
<!--显示data中的数据-->
<!--用v-model,绑定data中定义的message变量-->
<!--使用v-model以后,定义的value值就不起作用了,而是会直接使用data中定义的变量message的值-->
<input type="text" v-model="message" value="hello"/>
<p> Message is:{{message}}</p>
<!--选择框的双向绑定-->
<select v-model="selected">
<option disabled value="">请选择</option>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
<span>Selected: {{ selected }}</span>
</div>
<!--viewmodel脚本控制层-->
<script>
//Vue(),就是viewModel层的内容
var app = new Vue({
el: '#app', //el为element的缩写,挂载元素
data: { //这个data,就是model层,即数据内容
message: 'Hello Vue!',
selected: ''
}
})
</script>
</body>
</html>
15.组件,即模板
1.新建一个项目文件夹“Vue组件” 2.在“Vue组件"文件夹下创建index.html 3.index.html内容: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <!-- 开发环境版本,包含了有帮助的命令行警告 --> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><!--引入vue.js--> <title>Vue组件</title> </head> <body> <!--MVVM中,view层只能通过viewmodel来对接model,即只能展示viewmodel中的内容,不能直接展示model中的内容--> <!--view展示层--> <div id="app"> <!--显示data中的数据--> <ul> <!--my-component-li组件使用v-for来读取data中leixinglist的内容,遍历每一项为leixingone--> <!--通过v-bind,将v_for中获取到的leixingone的值,赋值给zujianleixingone,对应props中的参数zujianleixingone--> <my-component-li v-for="leixingone in leixinglist" v-bind:zujianleixingone="leixingone"></my-component-li> <!--使用组件my-component-li--> </ul> </div> <!--viewmodel脚本控制层--> <script> //定义一个组件 //第一个参数为组件的名字 //第二个参数为组件的内容 //第二个参数中的template,为html显示层的模板 Vue.component("my-component-li",{ props:["zujianleixingone"], //组件中传入的变量leixingone不能被template中的内容直接使用,需要用props来获取变量,然后再在template中使用 template:'<li>{{zujianleixingone}}</li>' //模板中使用组件中传入的zujianleixingone的变量参数 }) //Vue(),就是viewModel层的内容 var app = new Vue({ el: '#app', //el为element的缩写,挂载元素 data: { //这个data,就是model层,即数据内容 leixinglist:["美女","帅哥","萝莉","御姐"] } }) </script> </body> </html>
16.计算属性(计算属性时用来声明式的描述一个值依赖了其他的值)
1.新建一个项目文件夹“计算属性” 2.在“计算属性"文件夹下创建index.html 3.index.html内容: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <!-- 开发环境版本,包含了有帮助的命令行警告 --> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><!--引入vue.js--> <title>计算属性</title> </head> <body> <!--MVVM中,view层只能通过viewmodel来对接model,即只能展示viewmodel中的内容,不能直接展示model中的内容--> <!--view展示层--> <div id="app"> <!--显示data中的数据--> <!--调用函数方法,要带有括号--> <p>当前时间方法: {{getCurrentTimeMethods()}}</p> <!--调用计算属性,不嫩带括号--> <p>当前时间计算属性: {{getCurrentTimeComputed}}</p> </div> <!--viewmodel脚本控制层--> <script> //Vue(),就是viewModel层的内容 var app = new Vue({ el: '#app', //el为element的缩写,挂载元素 data: { //这个data,就是model层,即数据内容 message: 'Hello Vue!' }, //定义方法 methods:{ getCurrentTimeMethods:function () { return Date.now(); } }, //定义计算属性 //计算属性中定义的方法的名字和methods中定义的方法的名字不能重名,否则会报错 computed:{ getCurrentTimeComputed:function () { return Date.now(); } } }) </script> </body> </html>
17.插槽与自定义事件(插槽是为了确定组件摆放的位置)
18.自定义事件