vue常用指令

vue.js官方给自己的定义是数据模板引擎,并给出了一套渲染数据的指令.本文详细介绍vue.js的常用指令.

官网:点我

一.v-text、v-html

v-text:用于绑定文本

v-html:用于绑定html

<div id="app">
<p>姓名:<label v-text="Name"></label></p>
<p>姓名:{{Name}}</p>
<div v-html="Age">年龄:</div>
</div>
<script>
new Vue({
el: "#app",
data: {
Name:"corn",
Age:"<label>20</label>"
}
})
</script>
=======================>
姓名:corn
姓名:corn
20
  • 1.{{Name}}这种写法和v-text的作用是相同的,用于绑定标签的text属性,如果标签没有text属性,该绑定会失效,比如在一个文本框上面使用v-text时没有效果的.
  • 2.从结果看出,v-html绑定后会覆盖原来标签标签里面的内容,此处是覆盖,而并非append.
  • 3.对于v-html应用时要慎重,在网站上会动态渲染任意html有一定的危险存在,因此容易导致XSS跨站脚本攻击.所以最好在新任的网址上面使用
  • 4.v-text和v-html绑定都是单向的,只能从Model到View的绑定,不能实现从View到Model的更新.

二.v-model指令

v-model实现双向绑定,vue限定只能对表单空间进行绑定,常见的由input,select,textarea等.

<div id="student">
<p>编辑姓名:<input type="text" v-model="Name" /></p>
<p>姓名:{{Name}}</p>
<br> <p>编辑备注:<textarea v-model="Remark"></textarea></p>
<p>备注:{{Remark}}</p>
<br> <input type="checkbox" id="basketball" value="篮球" v-model="Hobby" />
<label for="basketball">篮球</label> <input type="checkbox" id="football" value="足球" v-model="Hobby"/>
<label for="football">足球</label> <input type="checkbox" id="running" value="跑步" v-model="Hobby"/>
<label for="running">跑步</label> <br>
<p>学生爱好:{{Hobby}}</p> <p>户籍:{{Huji}}</p>
<select class="form-control" v-model="Huji">
<option>北京</option>
<option>新疆</option>
<option>甘肃</option>
</select>
</div> <script>
//Model
let data = {
Name:"Wangxc",
Age:20,
Hobby:[],
Remark:"优秀",
Huji:""
}
//viewModel
let vm = new Vue({
el:"#student",
data:data,
});
</script>

三.v-if v-else-if v-else指令

v-if和v-else在使用条件运算符判断时常用,需要说明的是,v-if可以单独使用,但是v-else的前面必须有一个v-if的条件或者v-show指令.这里的v-else可以不写,experssion表达式是一个返回bool类型的属性或者表达式.v-else-if的意思相当于python中的elif,否则如果.

<div id="app">
<p>姓名:<label v-text="Name"></label></p>
<p>是否已婚:<span v-if="IsMarry">是</span><span v-else>否</span></p>
<p>大人or小孩:<span v-if="Age>18">大人</span><span v-else>小孩</span></p>
<p>单位:{{School}}</p>
</div> <script>
let data={
Name:"corn",
IsMarry:false,
Age:21,
School:"oldboy''",
}
//ViewModel
let vm = new Vue({
el:"#app",
data:data,
});
</script> //--------->
姓名:corn
是否已婚:否
大人or小孩:大人
单位:oldboy

四.v-show指令

v-show指令表示根据表达式的bool值来决定是否显示该元素。如果bool是false,对应的dom标签还是会渲染到页面上,只是css的display设为none而已,而如果用v-if,bool值为false时整个dom树都不会被渲染到页面上。从这点来说,如果需求是需要经常切换元素的显示和隐藏,使用v-shew效率更高,而如果只做 一次条件判断,则使用v-if更加合适。

v-show常和v-else 一起使用,表示如果v-show条件满足则显示当前标签,否则显示v-else标签。

<div id="app">
<p>姓名:<label v-text="Name"></label></p>
<p>是否已婚:<span v-show="IsMarry">是</span></p>
</div> <script>
let data = {
Name:"corn",
IsMarry:false,
}
let vm = new Vue({
el:"#app",
data:data,
});
</script> //----------->
姓名:corn
是否已婚:

五.v-for指令

v-for指令需要以item in items 形式的特殊语法,常用来绑定数据对象。

<div id="app">
<ul>
<li v-for="value in nums">{{value}}</li>
</ul>
</div> <script>
let vm = new Vue({
el:"#app",
data:{
nums:[1,2,3,4,5]
}
});
</script> //-------------->
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>

除基础数据之外,还支持json数组的绑定:

<div id="array">
<ul>
<li v-for="item in items">姓名:{{item.Name}},年龄:{{item.Age}}</li>
</ul>
</div> <script>
let vue = new Vue({
el:"#array",
data:{
items:[
{
Name:"呵呵",
Age:20
},
{
Name:"虫虫",
Age:25
}
]
}
});
</script> //---------->
姓名:呵呵,年龄:20
姓名:虫虫,年龄:25

在v-for里面,可以使用<template>标签渲染多个元素块,下面基于bootstrap样式使用v-for、v-if、v-else等实现一个简单的demo.

<style>
#myPage li{float:left;list-style:none;padding:6px 10px;border:1px solid #ddd;border-left:0px;}
#myPage li:first-child{border-left:1px solid #ddd;border-radius:6px 0 0 6px;}
#myPage li:last-child{border-radius:0 6px 6px 0;}
#myPage li a{color:#0081cc;text-decoration:none;}
#myPage li.disabled a{color:#999;}
#myPage li.active{background:#0081cc}
#myPage li.active a{color:#fff;}
</style> <div id="myPage">
<nav>
<ul>
<template v-for="page in pages">
<li v-if="page==1" class="disabled"><a href="#">上一页</a></li>
<li v-if="page==1" class="active"><a href="#">{{page}}</a></li>
<li v-else><a href="#">{{page}}</a></li>
<li v-if="page==pages"><a href="#">下一页</a></li>
</template>
</ul>
</nav>
</div> <script>
let myPage = new Vue({
el:"#myPage",
data:{
pages:10
}
});
</script>

实现效果:

v-for指令除了支持数据对象的迭代以外,还支持普通json对象的迭代,如:

<div id="list">
<ul>
<li v-for="(item,key) in items">{{key}}:{{item}}</li>
<li v-for="(item,key,index) in items">{{index}}.{{key}}:{{item}}</li>
</ul>
</div> <script>
let list = new Vue({
el:"#list",
data:{
items:{Name:"corn",Age:21,Company:"oldboy"}
}
});
</script> //------------------->
Name:corn
Age:21
Company:oldboy
0.Name:corn
1.Age:21
2.Company:oldboy

六.v-once指令

v-once表示只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过。什么意思呢?来看demo:

<div id="app">
<p>姓名:<label v-once v-text="Name"></label></p>
<p v-once>年龄:{{Age}}</p>
<p>学校:{{School}}</p>
</div> <script>
let data = {
Name:"小明",
Age:18,
School:"光明小学",
}
let vm = new Vue({
el:"#app",
data:data,
});
</script>

从demo看出,只要使用v-once指令的,View和Model之间除了初次渲染同步,之后便不再同步,而同一次绑定里面没使用v-once指令的还是会继续同步。

七.v-bind指令

对于html标签的text、value等属性,Vue里面提供了v-text、v-model去绑定。但是对于除此之外的其他属性呢,这就要用到接下来要说的v-bind指令了。v-bind的作用是绑定除了text、value之外的其他html标签属性,常见的比如class、style、自定义标签的自定义属性等。

<div id="app">
<p>姓名:<label v-text="Name"></label></p>
<p>是否女性:<span class="classSex" v-bind:class="{backred:IsBack}"><label v-if="IsBack">是</label></span></p>
<p>岗位等级:<span v-bind:style="{color:level}">aa</span></p>
</div> <script>
let data = {
Name:"corn",
Age:21,
level:"red",
IsBack:true
}
let vm = new Vue({
el:"#app",
data:data,
})
</script> //--------------------->
姓名:Wangxc 是否男性:是 岗位等级:aa

需要说明的是同一个标签里面的同一个属性,可以既有绑定的写法,也有静态的写法,组件会自动帮你合并,比如上文中的class属性。

八.v-on指令

在vue中v-on指令用来绑定标签的事件,语法和v-bind类似。

v-on:event="expression",这里的event可以是js里的常用事件,也可以是自定义的事件。

<div id="app">
<p>姓名:<label v-text="Name"></label></p>
<p>年龄:{{Age}}</p>
<botton v-on:click="Age++;if(Name=='Wangxc')Name='hehe';else Name='Wangxc';">增加年龄</botton>
</div> <script>
let vm = new Vue({
el:"#app",
data:{
Name:"corn",
Age:"21"
}
});
</script> //------------>
这段代码是一个最简单的应用,直接在click事件里面执行逻辑,改变变量的值。

除了直接在标签内写处理逻辑,还可以定义方法事件处理器:

<div id="clickEvent">
<p>姓名:<label v-text="Name"></label></p>
<p>年龄:{{Age}}</p>
<botton v-on:click="Hello">Hello</botton>
</div> <script>
let clickEvent = new Vue({
el:"#clickEvent",
data:{
Name:"corn",
Age:"21"
},
methods:{
Hello:function(){
console.log("Hello " + this.Name + "!");
this.Age++
}
}
});
</script>

九,实现增删改查

<div id="app">
<div>用户管理</div>
<table>
<thead>
<tr>
<th>用户名</th>
<th>年龄</th>
<th>毕业学校</th>
<th>备注</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<template v-for="row in rows">
<tr>
<td>{{row.Name}}</td>
<td>{{row.Age}}</td>
<td>{{row.School}}</td>
<td>{{row.Remark}}</td>
<td><a href="#" @click="Edit(row)">编辑</a>&nbsp;&nbsp;<a href="#" @click="Delete(row.Id)">删除</a></td>
</tr>
</template>
<tr>
<td><input type="text" v-model="rowtemplate.Name" /></td>
<td><input type="text" v-model="rowtemplate.Age" /></td>
<td>
<select name="" v-model="rowtemplate.School">
<option>第一小学</option>
<option>第二小学</option>
<option>第三小学</option>
</select>
</td>
<td><input type="text" v-model="rowtemplate.Remark"/></td>
<td><button type="button" @click="Save">保存</button></td>
</tr>
</tbody>
</table>
</div> <script>
let data = {
rows:[
{Id:1,Name:"hehe",Age:18,School:"第一小学",Remark:"三好学生"},
{Id:2,Name:"chongchong",Age:20,School:"第二小学",Remark:"调皮学生"},
{Id:3,Name:"yy",Age:18,School:"第三小学",Remark:"好孩子"},
{Id:4,Name:"hehe",Age:18,School:"第一小学",Remark:"三好学生"},
{Id:5,Name:"chongchong",Age:20,School:"第二小学",Remark:"调皮学生"},
{Id:6,Name:"yy",Age:18,School:"第三小学",Remark:"好孩子"}
],
rowtemplate:{Id:0,Name:"",Age:"",School:"",Remark:""}
};
let vm = new Vue({
el:"#app",
data:data,
methods:{
Save:function(event){
if(this.rowtemplate.Id==0){
//设置当前新增行的Id
this.rowtemplate.Id = this.rows.length + 1;
this.rows.push(this.rowtemplate);
}
//还原模板
this.rowtemplate = {Id:0,Name:"",Age:"",School:"",Remark:""}
},
Delete:function(Id){
//实际项目中参数操作肯定会涉及到id去后台处理,这里只是展示
for(var i=0;i<this.rows.length;i++){
if(this.rows[i].Id == Id){
this.rows.splice(i,1);
break;
}
}
},
Edit:function(row){
this.rowtemplate = row;
}
}
});
</script>

Vue.js之常用指令的更多相关文章

  1. 1.Vue.js的常用指令

      Vue.js介绍 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得 ...

  2. Vue.js简介及指令

    1.Vue.js的特点 Vue.js是一个Javascript MVVM(Model-View-ViewModel)库,与传统Jquery的区别在于,Vue.js舍弃了繁杂的DOM操作, 如取DOM值 ...

  3. Vue.js:自定义指令

    ylbtech-Vue.js:自定义指令 1.返回顶部 1. Vue.js 自定义指令 除了默认设置的核心指令( v-model 和 v-show ), Vue 也允许注册自定义指令. 下面我们注册一 ...

  4. vue.js 四(指令和自定义指令)

    官方的指令说明已经很简单了,这里再写一遍,也是自己加深一下印象 v-text 就是写入单纯的文本,可以忽略这个指令直接双花括号代替 <span v-text="msg"> ...

  5. Vue的十个常用指令

    1.v-text:用于更新标签包含的文本,作用和{{}}的效果一样. 2.v-html:绑定一些包含html代码的数据在视图上. 3.v-show:用来控制元素的display属性,和显示隐藏有关.v ...

  6. vue.js常用指令

    本文摘自:http://www.cnblogs.com/rik28/p/6024425.html Vue.js的常用指令 上面用到的v-model是Vue.js常用的一个指令,那么指令是什么呢? Vu ...

  7. Vue专题-js常用指令

    vue.js官方给自己的定为是数据模板引擎,并给出了一套渲染数据的指令.本文详细介绍了vue.js的常用指令. vue.js常用指令 Vue.js使用方式及文本插值 Vue.js 使用了基于 HTML ...

  8. 【Vue常用指令】

    目录 v-html v-text v-for v-if v-show v-bind v-on v-model 指令修饰符 计算与侦听属性 自定义属性 获取DOM元素 "@ *** Vue.j ...

  9. Vue.js——60分钟快速入门

    Vue.js介绍 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得我们 ...

随机推荐

  1. pass语句

    Python pass是空语句,是为了保持程序结构的完整性.  pass 不做任何事情,一般用做占位语句. #!/usr/bin/python # -*- coding: UTF-8 -*- # 输出 ...

  2. Nexus修改admin密码及其添加用户

    Nexus之所以修改密码,是为了安全起见,个人学习的话,本地windows或者虚拟机即可,外网服务器建议将密码修改复杂点,而且强烈建议端口不要8081,最好将其改为其他的.同样也是为了安全起见. 添加 ...

  3. java把行政区划放到一个节点树形中

    作者原创:转载请注明出处.https://www.cnblogs.com/yunqing/p/9486923.html 先放数据,t_city表 //津京冀地区行政区划数据 SET FOREIGN_K ...

  4. ubuntu使用----高效快捷键

    桌面快捷键 : ALT + F1: 聚焦到桌面左侧任务导航栏,可按上下键导航. ALT + F2: 运行命令 ALT + F4: 关闭窗口 ALT + TAB: 切换程序窗口 ALT + 空格: 打开 ...

  5. 将form表单元素的值序列化成对象

    /**jQuery * 将form表单元素的值序列化成对象 * @returns object */ var serializeObject = function(form) { var o = {} ...

  6. 解决error possibly undefined macro AC_MSG_ERROR

    问题 出现如下缺少宏的问题 error: possibly undefined macro: AC_MSG_ERROR error: possibly undefined macro: AC_SUBS ...

  7. CentOS7开发环境搭建

    BIOS开启VT支持 查询笔记本进入BIOS的按键,启动BIOS的虚拟化设置 假设安装360卫士,那么请永久关闭Intel-VT核晶防护引擎 CentOS DNS配置 Linux 下设置DNS位置有3 ...

  8. java点滴之MulticastSocket的使用

    一基本概念 该类恰是上文介绍的DatagramSocket的子类. DatagramSocket仅仅同意数据报发送给指定的目标地址,而MulticastSocket能够将数据报以广播的方式发送到多个c ...

  9. Android签名生成和互转

    原文链接:http://blog.votzone.com/2018/05/05/android_signature.html   Android 的签名有两种方式,一种使用jdk 提供的jarsign ...

  10. 【Linux】Linux中VIM编辑器的使用

    vim编辑器是我们在Linux中不可或缺的一部分,我们通常会使用它去自定义编辑文本已达到我们的需求,那么vim文本编辑器具体要怎么使用呢.今天跟大家分享一下vim编辑器的使用: vim编辑器模式介绍 ...