vue渐进式框架 MVC和MVVM vue指令

vue 用于构建用户界面的渐进式框架

如何引用(使用)vue

1.直接引入vue.js文件 在head里面写

       没有网络也可以使用

       在该网址中下载如图所示文件https://cn.vuejs.org/v2/guide/installation.html 

       然后该文件引入项目中 在html文档里script引用


       2.通过cdn方式引入 在head里面写

       没有网络不能使用

<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js" ></script> 


       3.通过脚手架cli方式引入,初学者不推荐

创建vue项目

       1.引入vue文件(以上三种都可以) head里面 title下面
       2.视图部分 写在body中 html页面内容
       3.脚本部分 写在script中 

 vue模板的语法 V大写

       1.定义不同类型的数据data: 在脚本中定义 在视图页面使用 {{键名}}  数据都是采用键值对的方式定义的

视图部分:

        <div id="app">
			<!-- 视图中通过双花括号形式展示数据 -->
			数字: {{msg}}
			<p>字符串: {{msg2}}</p>
			<p>小数: {{numfloat}}</p>
			<p>布尔类型: {{bool}}</p>
			<p>数组: {{arr}}</p>
		</div>

脚本部分: 

		//创建vue对象 数据都是采用键值对的方式定义的
		var vm = new Vue({
			//元素--要定位的元素
			el:"#app",//el是element的简写 代表元素
			//数据--要绑定的数据
			data:{//依然采用键值对方式定义
				msg:123,
				msg2:"hello",
				numfloat:123.4,
				bool:true,
				arr:[1,2,3,4]
			}
		});

页面效果:

        2.关于字符串拼接符号+ 符号两端有一段是字符串 +做拼接作用

        3.关于算数运算符+ (同数学) 两端为数字类型参与+运算
           其他三个符号按照数学形式正常运算 包括符号两端有数字类型的字符串也会正常运算

        4.取整 (支持js方法)  Math.floor(值)

   视图部分: <p>+拼接: {{msg+msg2}}</p> <!-- 因为+两遍有字符串 -->
			<p>+加法运算符: {{msg+numfloat}}</p>
			<p>支持js函数: {{Math.floor(numfloat)}}</p><!-- Math.floor向下取整 -->
			<p>支持三元运算符: {{msg>numfloat?msg : numfloat}}</p>


   脚本部分:	<script type="text/javascript">
                 var vm = new Vue({
			    //元素--要定位的元素
			    el:"#app",//el是element的简写 代表元素
                data:{//依然采用键值对方式定义
				    msg:123,
				    msg2:"hello",
				    numfloat:123.4,
				    bool:true,
				    arr:[1,2,3,4]
			        }
		        });
            </script>

页面效果:

        5.调用方法methods  在脚本中定义方法 在视图中调用方法 调用函数: {{方法名(键名)(参数)}} 采用键值对方式定义

视图内容:    调用函数: {{sayHi()}} 
			<br>
			调用函数:{{sayHello('哈哈哈')}}

脚本内容:    <script type="text/javascript">
		        //创建vue对象 数据都是采用键值对的方式定义的
		        var vm = new Vue({
			    //元素--要定位的元素
			    el:"#app",//el是element的简写 代表元素
			    methods:{//依然采用键值对方式定义
				    sayHi:function(){
					alert("Hi...");
				    },
				sayHello:function(a){
					alert(a);
				    }
			    }
		    });
	    </script>

页面效果:

6.修改data数据
        方式一: vm.$data.msg = 256;
        方式二: vm.msg = 345;

		var vm = new Vue({
			//元素--要定位的元素
			el:"#app",//el是element的简写 代表元素
			//数据--要绑定的数据
			data:{//依然采用键值对方式定义
				msg:123
			}			
		});
		
		//修改data数据
		 vm.$data.msg = 256;
		 vm.msg = 345;

MVC思想

     M:model 模型层
     V:view 视图层
     C:Controller 控制层

     Controller 负责将model的数据在view中显示出来 换句话说在controller里面把model赋值给view

MVVM思想

     M:model 模型层
     V:view 视图层
     VM: ViewModel视图模型层

     他有两个方向
         1是将模型转换为视图 将后端传递的数据转换为所看到的页面 实现方式:数据绑定
         2是将视图转换为模型 将所看到的页面转化为后端数据 实现方式:DOM事件监听

MVC和MVVM的区别

MVC是单向的 MVVM是双向的

vue指令 是指有v-前缀的特殊属性叫做指令

1.v-text  表示文本

        针对于文本可以使用{{msg}}双花括号形式展示,但是在js没有加载完的时候会显示文本{{msg}}         源代码 看起来不太好
          所以可以使用v-tet标签替换
          例如
:<p>{{msg}}</p> 替换为 <p v-text="msg"></p>

视图部分:
使用v-txt属性展示数据:<p v-text="txt"></p> //展示结果为abc--txt
脚本部分;
new Vue({
			//元素--要绑定的元素
			el:"#app",
			//数据--要绑定的数据
			data:{
				txt:"abc--txt",
			}
		})

2.v-html 可以识别标签的文本

        针对于解析带有html的文本 v-txt指令不能识别html标签 所有内容当做纯文本看待,
          为了真正可以输出带有html标签的内容 可以使用v-html指令
          例如<p v-html="txt2"></p>

视图部分:
			使用v-txt属性展示数据:<p v-text="txt2"></p>//显示结果为<h3>abc--txt2</h3>
			使用v-html属性展示数据:<p v-html="txt2"></p>//显示结果为标题3规格的abc--txt2
脚本部分:
new Vue({
			//元素--要绑定的元素
			el:"#app",
			//数据--要绑定的数据
			data:{
				txt2:"<h3>abc--txt2</h3>",

			}
		})

注意:在站点上动态渲染任何html可能都会存在危险,因为很容易遭到xss攻击,
          请只对可信任的内容使用html插值(v-html),绝对不要对用户输入内容使用插值

xss攻击
          跨站脚本攻击 通常指的是利用网络开发时留下的漏洞 使用巧妙的方法 注入恶意代码或者恶意指令到网页 使用户加载并且执行攻击者恶意制造的网页程序

3.v-bind指令 可以用于响应式更新html属性

书写形式:v-bind:属性 ="值(键名)" 简写方式为 :属性="值(键名)"

视图部分:
			<a v-bind:href="path">这是一个链接</a>
			<!-- 可以简写 如下 -->
			<a :href="path">这是一个链接</a>
脚本部分:
		new Vue({
			//元素--要绑定的元素
			el:"#app",
			//数据--要绑定的数据
			data:{
				path:"https://www.baidu.com"
			}
		})

4.v-if v-else v-else-if 表示选择性执行

     v-if指令 可以根据表达式的真假 来插入或者删除元素
     v-else指令 表示v-if的else块,必须跟v-if一起使用 或者v-else-if一起使用 否则不识别
     v-else-if:指令表示v-if的else-if块,可以连续使用

视图部分:
			<!-- v-if  可以根据表达式的真假 来插入或者删除元素 -->
			<p v-if="zhi">你是个好人</p>//值为真 所以执行该标签 视图显示你是个好人
			<p v-else >你是坏人</p>//v-if执行了所以带有v-else属性的标签就不执行 视图上不显示你是坏人
			
			<p v-if="2<3" >" 2小于3 "</p>
			<p v-else-if="2>3" >" 2大于3 "</p>
			<p v-else="2=3" >" 2等于3 "</p>
//这三个语句中 只有第一个为true 其他两个不执行
脚本部分:
		new Vue({
			//元素--要绑定的元素
			el:"#app",
			//数据--要绑定的数据
			data:{
				zhi:true
			}
			
		})

5.v-show 指令根据表达式的值的真假 来显示或隐藏元素

视图内容:
			<p v-show="zhi">今天周五啦</p>//因为zhi为true 所以在视图上显示 今天周五啦
脚本内容:
		new Vue({
			//元素--要绑定的元素
			el:"#app",
			//数据--要绑定的数据
			data:{
				zhi:true
			}
			
		})

  v-if和v-show指令的区别?(面试题)
      相同点
            v-if和v-show都可以动态的控制DOM元素 显示和隐藏
       不同点
            v-if的显示和隐藏是将DOM元素整个添加和删除
            而v-show隐藏则为该元素添加css属性display:none 但是DOM元素还在

6.v-on:代表事件 用于DOM监听取缔js的document 

视图部分:
			<input type="button" value="按钮" v-on:click="oclick()"/>
//此时一按按钮就会执行oclick()函数 弹框"还有半个小时吃饭了"
脚本内容:
		new Vue({
			//元素--要绑定的元素
			el:"#app",
			methods:{
			//方法名:方法体
				oclick:function(){
					alert("还有半个小时吃饭了")
				}
			}		
		})

指令练习      点击按钮将图片收起 再点击按钮图片显示

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 点击按钮将图片收起
		 再点击按钮图片显示-->
		 <script src="vue.min.js" ></script>
	</head>
	<body>
		<!-- 视图 -->
		<div id="d1">
			<img v-bind:src="s" v-show="msg" >
			<input type="button"  v-on:click="a()" value="按钮" />
		</div>
		
	</body>
	<script type="text/javascript">
		// 脚本
		new Vue({
			//元素
			el:"#d1",
			//绑定数据
			data:{
				s:"1.jpeg",
				msg:true
			},
			methods:{
				a:function(){
					// if(this.msg){
					// 	this.msg = false
					// 	}else{
					// 	this.msg = true	
					// }
					this.msg = !this.msg;
				}
			}
		})
		
	</script>
</html>

7.v-model指令 自动获取视图上被输入的内容 

在表单input textarea select 元素上创建双向绑定 它会根据控件类型
自动选取正确的方法来更新元素

视图部分:

		<!-- 视图部分 -->
		<div id="app">
			<!-- v-model指令 实现数据的双向绑定 -->
			<input type="text" v-model="msg1"/>文本框中的内容:{{msg1}}
			<br>
			<textarea v-model="msg2"></textarea>文本域内容:{{msg2}}
			<br>
			<!-- v-model指令  复选框 -->
			<input type="checkbox" v-model="checks" value="1"/>篮球
			<input type="checkbox" v-model="checks" value="2" />足球
			<input type="checkbox" v-model="checks" value="3" />羽毛球
			<br>复选框内容是:{{checks}}//视图显示结果为所选项的value值 比如 选中足球时 显示2
			<br>
			<!-- v-model指令 单选按钮 -->
			<input type="radio" value="1" v-model="sex"/>男
			<input type="radio" value="2" v-model="sex"/>女
			<br>
			单选按钮的值:{{sex}}//视图显示结果为所选项的value值 比如 选中男时 显示1
		</div>

脚本部分:

		new Vue({
			//元素
			el:"#app",
			//要绑定的数据
			data:{
				msg1:"",
				msg2:"",
				checks:[],//因为复选框有多个选择结果 所以为数组
				sex:""//因为是想获取在页面中输入的内容 所以初始都为""
			},
		})

8. v-for指令 遍历数组  基于一个数组来渲染一个列表 需要使用item-in-items的形式来定义        a,index in arr   arr表示数组名 a是数组中元素的别名 index索引 只能在in前面

      v-for遍历数组
      v-for指令 遍历数组 a,index in arr  arr表示数组名 a是数组中元素的别名 index索引 只能在in前面
      v-for遍历对象
      v-for指令 遍历对象  value,key in obj  obj表述对象名 key是对象中属性名 value是对象中属性值

视图部分:

		<div id="app">
			<!-- v-for指令 遍历数组 arr表示数组名 a是数组中元素的别名 index索引 只能在in前面-->
			<p v-for="a,index in arr">
			{{a}}---{{index}}
//页面效果为11---0  22---1  33---2  44---3  55---4
			</p>
			<!-- v-for指令 遍历对象 obj表述对象名 key是对象中属性名 value是对象中属性值-->
			<p v-for="value,key in obj">
				{{key}}---{{value}}
//页面效果为uname---张三  usex---1  birth---1900-1-1
			</p>
		</div>

脚本部分:

		// 创建vue对象
		new Vue({
			//元素
			el:"#app",
			//数据
			data:{
				arr:[11,22,33,44,55],
				obj:{//采用键值对方式定义
					uname: "张三",
					usex:1,
					birth:"1900-1-1"
				}
			}
		})

指令练习 要求鼠标单击无序列表里的内容 上方文字框就会显示相应内容

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 引入vue.js -->
		<script src="vue.min.js" ></script>	
	</head>
	<body>
		<div id="app">
			<input type="text" :value="msg"/>
			<ul>
				<li v-for="a in arr" v-on:click="show(a)" >{{a}}</li>
			</ul>
		</div>

	</body>
	<script type="text/javascript">
		new Vue({
			el:"#app",
			data:{
				msg:"",
				arr:["熊大","熊二","喜洋洋","玛卡巴卡","奥特曼","猪猪侠"]
			},
			methods:{
				show:function(a){
					this.msg = a
					
				}
					
			}		
		})
		
		
		
		
	</script>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值