1.Vuejs概述与快速入门
1.1Vuejs介绍
vue.js是一个构建数据驱动的web界面的渐进式框架。vue.js的目标是通过尽可能简单的API实现响应的数据绑定和组合的视图组件。不仅易于上手,还便于与第三方库或既有项目整合。
1.2MVVM模式
MVVm模式Model-View-ViewModel的简写。它本质就是MVC的改进版。MVVM就是讲其中的view的状态和行为抽象化,让我们讲视图UI和业务逻辑分开。
MVVM模式和MVC模式一样,主要目的是分离视图和模型。
vue.js是一个提供MVVM风格的双向数据绑定的JavaScript库,专注于VIew层,他的核心是MVVM中的VM,也就是ViewModel,ViewModel负责连接view和model层,保证数据和视图的一致,这种轻量级的架构让前端开发更加高效快捷。
![](https://i-blog.csdnimg.cn/blog_migrate/5fca92afed5587101eb1ec2b33e335d5.png)
过度为:
![](https://i-blog.csdnimg.cn/blog_migrate/e398dd4b6539b5f8e27ee338e7136c11.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d3a85a891b6f18bc04c3d309f72a6ec6.png)
2.简单案例
2.1
vue.js 下载地址:https://vuejs.org/v2/guide/installation.html
(1)创建项目
![](https://i-blog.csdnimg.cn/blog_migrate/9a7e9a091f4c9676c194d97962efa995.png)
(2)![](https://i-blog.csdnimg.cn/blog_migrate/adffa2c5e72bc87e8a146e7fe6bd6638.png)
(3)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>快速入门</title>
<script src="js/vue.js"></script>
</head>
<body>
<div id="app">
{{message}} <!-- //vue插值表达式 -->
</div>
</body>
<script>
//view model
//创建vue对象
new Vue({
el:"#app",//由vue接管id为app区域
data:{
message:"Hello Vue easy"//不加分号
}
});
</script>
</html> |
(4)![](https://i-blog.csdnimg.cn/blog_migrate/58e09b3185516428a96f0365abfd335e.png)
2.2挂载点,模板,实例之前的关系
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>vue入门</title> <!-- 引入vue.min.js文件,直接引用这个文件就行了,不用引用jquery.js文件的 --> <script type="text/javascript" src="./vue.min.js"></script> </head> <body> <!-- 挂载点,模板,实例之前的关系 --> <!-- 此div标签被称为vue1实例的挂载点。vue1会处理该挂载点下面的内容。 --> <!-- 挂载点内部的内容被称为模板,模板内容也可以写到template标签里面,切记template值需要使用html元素包含起来。 --> <div id="app"></div> <!-- 此div标签被称为vue2实例的挂载点 --> <div id="app2">{{message}}</div> <script type="text/javascript"> //创建一个Vue的实例,让这个实例去接管id为app的这个元素 //实例vue1,创建了一个Vue实例。 var vue1 = new Vue({ el: "#app", //el关键字是element单词的缩写,代表元素。#app是id为app。el的值等于#app代表和那个dom节点的id做绑定。 template: '<h1>I am biehl,{{message}}</h1>', //template标签的值被称为模板内容。 data:{ //data关键字是存放的需求数据。去处理id等于app这一块区域的内容。 message:"hello vue!" //message名称可以根据自己需求起名称。 } }); var vue2 = new Vue({ el:"#app2", data:{ message:"你好,vue框架" } }); </script> </body> </html> |
2.3Vue中方法的使用以及属性的改变,Vue实例中的数据,事件,方法
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>vue入门</title> <!-- 引入vue.min.js文件,直接引用这个文件就行了,不用引用jquery.js文件的 --> <script type="text/javascript" src="./vue.min.js"></script> </head> <body> <!-- 挂载点,模板,实例之前的关系 --> <!-- 此div标签被称为vue1实例的挂载点。vue1会处理该挂载点下面的内容。 --> <!-- 挂载点内部的内容被称为模板,模板内容也可以写到template标签里面,切记template值需要使用html元素包含起来。 --> <div id="app"></div> <!-- 此div标签被称为vue2实例的挂载点 --> <div id="app2">{{message}}</div> <!-- {{number}}、{{msg}}被称为插值表达式 --> <!-- <div id="app3">{{number}},{{msg}}</div> --> <!-- v-text是vue的一个属性指令,值是一个变量,代表了h4要显示的变量就是number的值,等同于v-html属性命令,此命令将html进行转义,v-text不转义。 --> <div id="app3"> <!-- <h4 v-text="number"></h4> --> <div v-on:click="()=>{alert('world vue!!!')}">{{msg}}</div> <div v-on:click="handleClick">{{msg}}</div> <!-- v-on:的简写是@这个符号 --> <div @click="handleClick2">{{msg}}</div> </div> <script type="text/javascript"> //创建一个Vue的实例,让这个实例去接管id为app的这个元素 //实例vue1,创建了一个Vue实例。 var vue1 = new Vue({ el: "#app", //el关键字是element单词的缩写,代表元素。#app是id为app。el的值等于#app代表和那个dom节点的id做绑定。 template: '<span>I am biehl,{{message}}</span>', //template标签的值被称为模板内容。 data:{ //data关键字是存放的需求数据。去处理id等于app这一块区域的内容。 message:"hello vue!" //message名称可以根据自己需求起名称。 } }); var vue2 = new Vue({ el:"#app2", data:{ message:"你好,vue框架" } }); var vue3 = new Vue({ el:"#app3", data:{ number:123, //vue中改变数据的显示,设法改变数据即可,即可完成数据的改变。 msg:"hello vue!" }, methods:{ handleClick:function(){ console.log("world vue!!!!!!!!"); alert("world vue!!!!!!!!"); this.msg = "world vue!!!"; //在vue的methods中改变data里面的数据,如此调用即可完成数据的改变 }, handleClick2:function(){ this.msg = "hello vue!!!"; }, } }); </script> </body> </html> |
2.4vue中属性绑定和双向数据绑定。1)、v-bind:等同于:。2)、v-on:等同于@。3)、双向绑定v-model。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>vue入门</title> <!-- 引入vue.min.js文件,直接引用这个文件就行了,不用引用jquery.js文件的 --> <script type="text/javascript" src="./vue.min.js"></script> </head> <body> <!-- vue中属性绑定和双向数据绑定。1、v-bind:等同于:。2、v-on:等同于@。 --> <div id="app1"> <div v-bind:title="title">{{msg}}</div> <div :title="'I am biehl , ' + title">{{msg}}</div> <!-- v-bind:value等价于:value。 --> <input type="text" name="userName" v-bind:value="content"> <div>{{content}}</div> <!-- 双向绑定v-model,指定data的password的值 --> <input type="password" name="password" v-model="password"> <div>{{password}}</div> </div> <script type="text/javascript"> var vue1 = new Vue({ el:"#app1", //el的值是id,所以一定记得加上#,例如#app1 data:{ msg:"hello vue!", title:"this is hello vue!!!", content:"this is content!!!", password:"123456", } }); </script> </body> </html> |
2.5Vue中计算属性和侦听器。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>vue入门</title> <!-- 引入vue.min.js文件,直接引用这个文件就行了,不用引用jquery.js文件的 --> <script type="text/javascript" src="./vue.min.js"></script> </head> <body> <!-- Vue中计算属性和侦听器 --> <div id="app2"> 姓:<input type="text" name="firstName" v-model="firstName" /><br/> 名:<input type="text" name="lastName" v-model="lastName" /> <br/> <!-- 冗余的显示 --> 姓名:<span>{{firstName}}{{lastName}}</span> <br/> 姓名:<span>{{fullName}}</span><br/> <div>{{count}}</div> <div v-text="count"></div> <div v-html="count"></div> <!-- 监听器的使用 --> </div> <script type="text/javascript"> /* Vue中计算属性和侦听器 */ var vue2 = new Vue({ el:"#app2", data:{ firstName:"张", lastName:"三三", count:0, }, //vue计算属性computed computed:{ fullName:function(){ return this.firstName + ' ' + this.lastName; }, }, //监听器,监听某一个数据的变化,当某一个数据变化,就执行自己的逻辑。 watch:{ /*firstName:function(){ this.count++; }, lastName:function(){ this.count++; },*/ fullName:function(){ this.count++; //alert("什么鬼......"); } } }); </script> </body> </html> |
2.5Vue中的v-if、v-for、v-show命令。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>vue入门</title> <!-- 引入vue.min.js文件,直接引用这个文件就行了,不用引用jquery.js文件的 --> <script type="text/javascript" src="./vue.min.js"></script> </head> <body> <!-- Vue中的v-if、v-for、v-show命令 --> <div id="app1"> <!-- v-if会让div标签消失 --> <div v-if="show">{{msg}}</div> <button type="button" @click="handleClick">toggle</button> <br/><br/> <!-- v-show标签是将div的样式display属性设置为none的,style="display: none;" --> <div v-show="show">{{msg}}</div> <button type="button" @click="handleClick2">toggle</button> <!-- v-for标签进行循环操作 --> <ul> <!-- 将list的值放到item里面,然后将item展示出来。:key加强渲染,但是循环值必须不同。 --> <li v-for="(item,index) of list" :key="item">{{item}}</li> </ul> </div> <script type="text/javascript"> var vue1 = new Vue({ el:"#app1", data:{ msg:"您好,vue!", show:true, list:[11,22,33,44,55,66] }, methods:{ handleClick:function(){ // this.show = !this.show,表示取show得反。这种思路很巧妙。 this.show = !this.show }, handleClick2:function(){ // this.show = !this.show,表示取show得反。这种思路很巧妙。 this.show = !this.show } } }); </script> </body> </html> |
2.6Vue的全局组件、局部组件。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>vue入门</title> <!-- 引入vue.min.js文件,直接引用这个文件就行了,不用引用jquery.js文件的 --> <script type="text/javascript" src="./vue.min.js"></script> </head> <body> <div id="app1"> <div> <!-- v-model数据交互 --> <input type="text" name="userName" v-model="inputValue"/> <!-- 点击事件 --> <button @click="handleClick">提交</button> <!-- <ul> 循环遍历输出结果 <li v-for="(item,index) of list" :key="index">{{item}}</li> </ul> --> <!-- 全局组件 --> <!-- <ul> <todo-item v-for="(item,index) of list" :key="index" :content="item">{{item}}</todo-item> </ul> --> <!-- 局部组件 --> <ul> <todo-item v-for="(item,index) of list" :key="index" :content="item">{{item}}</todo-item> </ul> </div> </div> <script type="text/javascript"> // 组件的拆分。全局组建 /*Vue.component('todo-item',{ props:['content'], template:'<li>{{content}}</li>' });*/ // 局部组件 var toDoItem = { props:['content'], template:'<li>{{content}}</li>' }; // vue实例 var vue1 = new Vue({ el:"#app1", //局部组件 components:{ 'todo-item':toDoItem }, data:{ msg:"hello vue!", inputValue:'', list:[], }, methods:{ handleClick:function(){ // vue的思路围绕着数据进行操作的,之前都是操作的dom. // 判断是否不为空且不为空字符串。 if(this.inputValue != null && this.inputValue != ''){ // 将输入框里面的值加到数组里面,展示在下面的列表里面 this.list.push(this.inputValue), // 将输入框里面的值设置为空 this.inputValue = '' } } } }); </script> </body> |