VUE基本命令({{str}}、v-text、v-html、v-bind、v-on:click、@click、onclick、v-model、v-for、v-if、v-show)
</!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title></title> <script src="./lib/vue-2.4.0.js"></script> <style> [v-cloak]{ display: none; } .style1{ color:red; } .style2{ background-color:blue; } .style3{ font-style:italic; } .style4{ font-size:30px; } .hFontColor{ color: brown } .hAlign{ text-align: center } td{ text-align: center } </style> </head> <body> <!-- 在外层标签div引入id属性值,将来vue.js会总通过该id,找到需要操作的元素 --> <!-- 在vuejs中,为了为页面中的元素渲染值(为前端标签对中的内容赋值) 可以使用3种形式: 插值表达式{{str}} v-text v-html --> <div id="app"> <!-- 在前端页面元素的部分,其中的内容我们暂时以插值表达式的形式来呈现 --> <!-- 在两对P标签中分别引入了插值表达式,相当于将P标签中的内容写活了,内容以变量的形式存在 --> <!-- 插值表达式如果网络比较慢的情况下页面会先是{{}},可以通过v-cloak去除这种闪烁问题 } --> <!-- 方法一:插值表达式 : 1.可以和页面原有内容进行拼接 2.赋予纯内容,html不会自动转换而直接显示--> <p v-cloak>====={{str1}}=====</p> <p v-cloak>{{str2}}</p> <!-- 方法二:v-text : 1.不能拼接,会先将内容清空再进行赋值 2.赋予纯内容,html不会自动转换而直接显示--> <p v-text="str3">=====</p> <!-- 方法三:v-html : 1.不能拼接,会先将内容清空再进行赋值 2.赋予内容外会自动转换html内容--> <p v-html="str4">=====</p> <!-- 以下input标签对value属性中的值,使用vm对象,由vm对象将data中的信息动态的赋予到该value属性值当中 --> <!-- 必须使用指令属性v-bind来完成,我们需要将v-bind:加在我们需要绑定的属性的前面,而且可以直接进行拼接固定内容 --> <!-- 可以直接省略用:代码v-bind:因为绑定操作复用率非常高--> <input type="text" :value="str5+'111'"> <p :title="str5">content......</p> <input type="button" value="submit" :title="str5+'Hello World'+str5"/> <!-- js中冒泡机制:在出发了内层元素的同时,也会随之继续触发外层元素(外层元素包裹了内层元素),在做点击的过程中,点击了内层元素,也可以认为是同时点击了外层元素.所以两个事件都会触发,实际开发中不需要这种冒泡的机制,所以要阻止这种效果的出现 --> <!-- v-on:click="fun1"的形式来绑定事件,相当于原生js中的onclick --> <input type="text" :value="str6"> <input type="button" value="原生onclick" onclick="funOriginal1()"> <input type="button" value="v-on:click" v-on:click="fun1"> <input type="button" value="简化@" @click="fun1"> <!-- 使用@click.stop来对事件的冒泡机制进行阻止 --> <div style="width:100px;height:100px;background-color:red" @click="funOut"> <div style="width:50px;height:50px;background-color:blue" @click.stop="funInner"> </div> </div> <!-- 所谓默认的行为指的是超链接中的 href 属性链接 在实际项目开发中,不仅仅只是按钮需要我们绑定事件来控制行为,超链接的使用我们也是要遵循这种自己绑定事件触发行为的方式。所以在 a 标签中的 href链接往往要被我们以特殊的方式处理掉。--> <a href="https://www.baidu.com" @click="fun1">原始href</a> <a href="https://www.baidu.com" @click.prevent="fun1">prevent后href</a> <!-- 使用@click.capture点击内层,会先触发外层事件再触发内层事件,加了capture的会被先触发 --> <div style="width:100px;height:100px;background-color:red" @click.capture="funOut"> <div style="width:50px;height:50px;background-color:blue" @click="funInner"> </div> </div> <!-- 使用@click.self点击按钮,只会触发按钮和外层事件,内层的self阻止了自己冒泡,不会触发内层事件 --> <div style="width:100px;height:100px;background-color:red" @click="funOut"> <div style="width:50px;height:50px;background-color:blue" @click.self="funInner"> <input type="button" @click="funInput" value="点击"> </div> </div> <!-- 点击1会先触发fun1再触发href; 点击2只触发fun1不触发href,第二次没触发@click只触发href只跳过一次 --> <a href="http://www.baidu.com" @click="fun1">点击1</a> <a href="http://www.baidu.com" @click.prevent.once="fun1">点击2prevent.once</a> <!-- v-model:数据双向绑定,只能运用在表单元素中 form表单中 form <input>系列 type:text,hidden,checkbox,radio.... <select> <textarea> ... --> <div> <h3>{{str7}}</h3> <input type="text" v-model:value="str7"/> </div> <!-- 使用v-model实现简单计算器 --> <div> <input type="text" v-model="num1"/> <select v-model="csign"> <option value="+">+</option> <option value="-">-</option> <option value="*">*</option> <option value="/">/</option> </select> <input type="text" v-model="num2"/> <input type="button" value="=" @click="count"/> <input type="text" v-model="result"/> </div> <!-- 样式:使用vuejs控制样式,会使样式变化的操作更加的灵活 --> <!-- class样式: 案例 1:传递一个 class 样式的数组,通过 v-bind 做样式的绑定该形式与之前的形式没有太大的区别 :class="[样式 1,样式 2]" 案例 2:通过三目(元)运算符操作以上 boolean?true 执行 :false 执行 案例 3:使用对象(json) 来表达以上三目(元)运算符的操作 {样式:flag} 案例 4:以对象引用样式 :class={} 案例 5:通过以直接模型 M 的形式做样式渲 注意:这样使用必须直接将具体的 boolean 值结果(true/false)赋值,不能以 this.模型的形式来做引用 --> <div> <span class="style1 style2 style3 style4">Hello Style</span>正常class </div> <div> <span :class="['style1','style2','style3','style4']">Hello Style</span>class数组 </div> <div> <span :class="['style1','style2','style3',flag?'style4':'']">Hello Style</span>class三元 </div> <div> <span :class="['style1','style2','style3',{'style4':flag}]">Hello Style</span>class json </div> <div> <span :class="{style1:true,style2:true,style3:flag,style4:false}">Hello Style</span>class 对象 </div> <div> <span :class="myStyle">Hello Style</span>class myStyle </div> <!-- style 样式补充:在实际项目开发中,对于 style 样式的使用,没有 class 使用的广泛,通常 style 属性仅仅只是对个别指定元素的样式进行的进一步补充使用。 --> <!-- 案例 1:引用样式对象:style="引用样式对象" 注意:在写 color 这样的样式属性的时候,由于仅仅只是一个单词,所以不需要加引号,开发中的大多数的样式都是包含横杠(-)的, 例如:font-style,background-color 等等,在使用这样带有-的演示属性的时候,必须套用在引号中。 'font-style' 'background-color' color--> <div> <span :style="myStyle1">Hello Style</span> </div> <!-- 案例 2:引用样式对象数组 --> <!-- :style="[样式对象引用 1,样式对象引用 2] --> <div> <!-- 引用data中的数据不需要'' --> <span :style="[myStyle1,myStyle2]">Hello Style</span> </div> <!-- 将数组展示出来 --> <!-- 方法一:直接使用插值表达式 --> <p>{{cityList[0]}}</p> <p>{{cityList[1]}}</p> <p>{{cityList[2]}}</p> <p>{{cityList[3]}}</p> <p>{{cityList[4]}}</p> <!-- v-for 案例 1:遍历字符串数组 案例 2:遍历对象数组 案例 3:遍历对象的属性和属性值 案例 4:遍历整型数 --> <!-- 对于 key 属性的应用,值得注意的是: 注意 1:key 属性值必须是一个数值或者字符串,对象不能当做属性值。否则系统会提出警告,将来不能有效的应用。 注意 2:key 属性的应用,必须要搭配绑定 v-bind 指令,在使用的时候必须是以该形式":key"来使用,否则系统不会生效。 注意 3:对 key 属性所赋的值,必须是记录的唯一标识,我们通常使用的是记录的 id --> <p v-for="(city,i) in cityList" :key="city.id"> <!-- 在以上需求的基础上 遍历出所有的元素以及对应的下标 --> {{i}}------{{city}} </p> <p v-for="(city,i) in cityObjList" :key="city.id"> <!-- 对象以 .属性名 的形式来取得属性值 --> {{i}}------{{city.id}}------{{city.name}}------{{city}} </p> <p v-for="(value,key,i) in city1"> <!--遍历对象的属性和属性值:必须以取出键值对的形式来遍历 (value值(属性值),key键(属性名)) in 对象 (value值(属性值),key键(属性名),i下标) in 对象--> {{i}}-------------{{key}}------------{{value}} </p> <!--以 元素 in 整型数值 --> <p v-for="count in 10"> {{count}} </p> <!-- v-if 和 v-show: true:效果是一模一样 false:v-if 中的元素是本身就没有的;v-show 中的元素是存在的,只是 通过 false 属性值,系统为该元素新增了 display:none,表示不展现该 元素--> <!-- v-if:boolean true/flase:当值为true:则展现标签对中的信息;当值为false:则不展现标签对中的信息--> <p v-if="true">显示该文本值1</p> <p v-if="flag">显示该文本值flag</p> <!-- v-show --> <p v-show="true">显示该文本值1</p> <p v-show="flag">显示该文本值flag</p> <!-- 模拟表结构: student id:编号 name:姓名 gender:性别 age:年龄 --> <h3 :class="hstyle">学生信息管理系统</h3> <hr width="100%"> <br/> <!-- 搭建添加操作相关信息 --> 编号:<input type="text" v-model="id"/> <!-- A0001 --> 姓名:<input type="text" v-model="name"/> 性别:<input type="text" v-model="gender"/> 年龄:<input type="text" v-model="age"/> <input type="button" value="保存学员" @click="save"/> <input type="text" v-model="sname" @keyup="search"/> <br/> <br/> <table border="1" width="100%" align="center" cellpadding="6px" cellspacing="0px"> <tr> <td>序号</td><!-- 1,2,3,4,5.... --> <td>编号</td> <td>姓名</td> <td>性别</td> <td>年龄</td> <td>操作</td><!-- 为删除超链接提供入口 --> </tr> <tr v-for="(stu,i) in sList" > <td>{{i+1}}</td> <td>{{stu.id}}</td> <td>{{stu.name}}</td> <td>{{stu.gender}}</td> <td>{{stu.age}}</td> <td><a href="javascript:void(0)" @click="del(stu.id)">删除</a></td> </tr> </table> </div> <script type="text/javascript"> // 当vue.js狂框架导入进来以后,在浏览器缓存中,就已经存在了一个vue架构的构造函数 // new出来的vm对象,就是页面中对于模型和视图(数据和页面元素)的整体调度着 var vm=new Vue({ //el元素表现的是要指定为那个标签进行相应的vue.js的操作,id以#形式引入,class以.形式引入 el:"#app", //data是vuejs中对于数据的表达,数据约定俗成的都是以json的形式来呈现的 //data属性中,存放的是el中要使用到的数据 //这里的data就是MVVM中M,专门用来表现数据的组件 data:{ "str0" : "<font color='red'>000</font>", "str1" : "<font color='red'>111</font>", "str2" : "<font color='red'>222</font>", "str3" : "<font color='red'>333</font>", "str4" : "<font color='red'>444</font>", "str5" : "555", "str6" : "666", "str7" : "777", "str8" : "888", "str9" : "999", num1 : 0, num2 : 0, csign : "+", result : 0, flag:false, //myStyle={style1:flag,style2:flag,style3:flag,style4:flag},//不能直接引用g'flag,要是显性的true和false值 myStyle:{style1:true,style2:true,style3:true,style4:false}, myStyle1 : {color:'red','font-size':'30px'}, myStyle2 : {'font-style':'italic','background-color':'aqua'}, cityList : ["北京","上海","广州","深圳","沈阳"], cityObjList : [ {id:"A0001",name:"北京"}, {id:"A0002",name:"上海"}, {id:"A0003",name:"广州"}, {id:"A0004",name:"深圳"}, {id:"A0005",name:"沈阳"}, ], city1 : {id:"A0001",name:"北京"}, sList : [ {id:"A0001",name:"zs",gender:"男",age:"23"}, {id:"A0002",name:"ls",gender:"男",age:"24"}, {id:"A0003",name:"ww",gender:"男",age:"25"} ], hstyle:{hFontColor:true,hAlign:true}, id : "", name : "", gender : "", age : "", sname:"", }, //methods:表示vuejs中对于绑定事件函数的定义,可以同时定义多个函数,多个函数之间使用逗号来进行分隔 methods:{ fun1(){ alert("abc"); }, funOut(){ alert("触发外层div"); }, funInner(){ alert("触发内层div"); }, funInput(){ alert("触发了内部按钮"); }, count(){ if(this.csign=="+"){ //直接取得的数值暂时是不能够直接计算的,默认的情况会按照字符串拼接的形式来触发+符号 //默认拼接字符串: 1+1=11 //在做数学计算之前,需要将数值格式化,才能够计算,使用parseInt方法做数值格式化的操作 this.result = parseInt(this.num1)+parseInt(this.num2); }else if(this.csign=="-"){ this.result = parseInt(this.num1)-parseInt(this.num2); }else if(this.csign=="*"){ this.result = parseInt(this.num1)*parseInt(this.num2); }else if(this.csign=="/"){ this.result = parseInt(this.num1)/parseInt(this.num2); } }, save(){ /* 通过在页面中对文本框进行信息的完善(对视图V进行数据的填充) 根据使用对于视图中值的绑定方式是v-model的方式,会实现双向数据绑定 通过对视图的数据的填充,同时也是对模型中数据的填充 在我们触发的save方法当中,取得模型中的值,就相当于是取得了在页面文本框填充的数据 将这些数据收集起来,形成一个对象,将该对象添加到我们的sList对象数据中就可以了 */ var s={id:this.is,name:this.name,gender:this.gender,age:this.age}; this.sList.push(s); }, del(id){ //id:需要删除记录的id,根据id来进行删除 /* 遍历sList中所有的对象 从每一个对象中取得id信息,将每一个id与参数id进行比较 如果id值相等,证明我们找到了需要删除的记录 将该记录从sList中移除掉 */ // alert(id); for(var i=0;i<this.sList.length;i++){ if(this.sList[i].id==id){ this.sList.splice(i,1); } } }, search(){ var orignal=this.sList; this.sList = []; for(var i=0;i<orignal.length;i++){ if(orignal[i].name.indexOf(this.sname)>=0){ this.sList.push(orignal[i]); } } } } }) function funOriginal1(){ alert("abcOriginal"); } </script> </body> </html>