文本类指令、v-bind指令、v-on指令、v-model指令、条件渲染指令、列表渲染指令

一、文本操作

  • v-text:文本变量
<p v-text='msg'></p>
<p>{{ msg }}</p>
  • v-once:一次性文本赋值,只能被赋值一次,后期无法更改
<p v-once>{{ msg }}</p>
  • v-html:html文本变量,可以解析html标签
<p v-html='msg'></p>
<script>
new Vue({
el: '#app',
data: {
msg: '<b>文本</b>'
}
})
</script>
  • v-model:双向数据绑定,控制表单元素的value值
<div id="app">
<input type="text" v-model='msg'>
<p>{{ msg }}</p>
</div>
<script>
new Vue({
el: '#app',
data: {
msg: ''
}
})
</script>
采用文本指令后,页面标签的内容由vue控制,原来用于标签的文本均会被vue中数据替换
  • 文本操作案例
<body>
<div id="app">
<!-- html全局属性语法: 全局属性名="属性值" -->
<p v-bind:title="title" a="a" b="b">hello</p> <!-- v-model也是对文本操作的指令,操作的是表单元素的value文本 -->
<input type="text" v-model="msg">
<!-- 采用文本指令后,页面标签的内容由vue实例控制,原来用于表示标签的文本均会被替换 -->
<p>{{ msg }}</p>
<!-- eg:原文本会被msg替换 -->
<p v-text='msg'>原文本</p>
<!-- 可以解析带html标签的文本信息 -->
<p v-html='msg'></p>
<!-- v-once控制的标签只能被赋值一次 -->
<p v-once>{{ msg }}</p>
</div>
</body>
<script src="js/vue-2.5.17.js"></script>
<script type="text/javascript">
// 指令: 出现在html标签中可以被vue解析处理的全局属性
new Vue({
el: "#app",
data: {
title: "",
msg: "message"
}
})
</script>

二、避免页面闪烁

  • v-cloak:避免页面加载闪烁
<style>
[v-cloak] {
display: none;
}
</style> <div id="app" v-cloak> </div>

三、重要指令(v-bind、v-on、v-model)

1、v-bind:该指令绑定的是属性(html标签的全局属性)

**v-bind: 可以简写为 : **

<div :class='a'></div>
<!-- 值a,两个字符串嵌套使用表示普通字符串 -->
<div v-bind:class='"a"'></div> <!-- 变量a -->
<div v-bind:class='a'></div> <!-- 变量a, b,class由两个变量 a,b 同时控制 -->
<div v-bind:class='[a, b]'></div> <!-- a为class值(类名),isA决定a是否存在(ture | false) ,即类名 a(显示 | 隐藏)-->
<div v-bind:class='{a: isA}'></div> <!-- 多class值:是否存在,class的值(类名)为“a b”,isA与isB控制class的值是否存在 -->
<div v-bind:class='{a: isA, b: isB}'></div> <!-- class的值(类名)为a b ,t与tt控制‘a b’是否存在 -->
<div v-bingd:class[{a:t}, {b:tt}]></div> <!-- 多style值,my_color为变量,cyan为普通值 -->
<div :style='{color:my_color, background:"cyan"}'></div>

2、v-on: 绑定的是事件,操作的是事件对应的方法名

v-on: 简写为 @ ,即 v-on:click <====> @click

<!-- 绑定函数fn1,将事件event传递过去,回调时可以取到事件ev -->
<div v-on:click='fn1'></div>
<script>
new Vue({
el:"#app",
methods:{
fn1:function(ev){
console.log(ev);
}
}
})
</script> <!-- 绑定函数fn2,并将自定义参数10传递过去,回调时只能取到自定义参数,事件参数ev丢失 -->
<div @click='fn2(10)'></div>
<script>
new Vue({
el:"#app",
methods:{
fn1:function(num){
console.log(num);
}
}
})
</script> <!-- 绑定函数fn3,并将事件event与自定义参数10传递过去,回调时可以取到事件ev和自定义参数 -->
<!-- $event 事件参数为固定写法 -->
<div @click='fn2($event, 10)'></div>
<script>
new Vue({
el:"#app",
methods:{
fn1:function(ev,num){
console.log(ev);
}
}
})
</script>

3、v-model 数据具有双向绑定,绑定的是value,

<!--1. 两个input绑定同一个val,那么其中一个input的内容改变会映射到另一个input -->
<input type="text" v-model='val' />
<textarea v-model='val'></textarea>
<!--2. 单个复选框:选中与否val默认值为true|false ,true选框选中会向后台提交数据,false选框未选中,不向后台提交数据 -->
<input type="checkbox" v-model='val' />
<script>
new Vue({
el:"#app",
data:{
val:true // 设置默认为选中
}
})
</script>
<!--3. 通过true-value|false-value修改默认值为true|false -->
<input type="checkbox" v-model='val' true-value="选中" false-value="未选中" /> <!--4. 多个复选框:val作为数组[]来使用,可以存储选中元素的value值,反之数组有对应value代表该选框选中 -->
<!-- 出现在数组中的值为选中状态 -->
<!-- 出现在数组中的值为选中状态 -->
<input type="checkbox" value="basketball" v-model='val' />
<input type="checkbox" value="football" v-model='val' />
<input type="checkbox" value="pingpong" v-model='val' />
<script>
new Vue({
el:"#app",
data:{
val:["basketball"]
}
})
</script>
<!--5. 多个单选框:val存储选中的单选框的value值 -->
<!-- 变量val的值为哪个单选框中的value值,那么该单选框为选中状态 -->
<input type="radio" value="男" v-model='val' />
<input type="radio" value="女" v-model='val' />
<script>
new Vue({
el:"#app",
data:{
val:"男"
}
})
</script>

四、条件渲染

  • v-if:值true会被渲染,值false不会被渲染
<div id="app">
<div v-if='isShow'>div div div</div>
<button @click='isShow = !isShow'>改变</button>
</div>
<script>
new Vue({
el: '#app',
data: {
isShow: true
}
})
</script>
  • v-else:与v-if结合使用形成对立面
<div id="app">
<div v-if='isShow'>div div div</div>
<div v-else='isShow'>DIV DIV DIV</div>
<button @click='isShow = !isShow'>改变</button>
</div>
<script>
new Vue({
el: '#app',
data: {
isShow: true
}
})
</script>
  • v-else-if:变量的多情况值判断
<div id="app">
<div v-if='tag == 0'>if if if</div>
<div v-else-if='tag == 1'>else if else</div>
<div v-else='tag == 2'>else else else</div>
<input type='number' min='0' max='2' v-model='tag' />
</div>
<script>
new Vue({
el: '#app',
data: {
tag: 0
}
})
</script>
  • template:不被渲染的vue结构标签
<template v-if="isShow">
<p>用template嵌套</p>
<p>可以为多行文本</p>
<p>同时显隐</p>
<p>且template标签不会被vue渲染到页面</p>
</template>
  • v-show:一定会被渲染到页面,以display属性控制显隐
  • key:为v-if方式的显隐创建缓存,提高效率
<div id="app">
<div v-if='tag == 0' key='0'>if if if</div>
<div v-else-if='tag == 1' key='1'>else if else</div>
<div v-else='tag == 2' key='2'>else else else</div>
<input type='number' min='0' max='2' v-model='tag' />
</div>
<script>
new Vue({
el: '#app',
data: {
tag: 0
}
})
</script>

五、列表渲染

  • v-for:循环渲染列表
<div id="app">
<ul>
<li v-for='item in items'>{{ item }}</li>
</ul>
<button @click='click'>改变</button>
</div>
<script>
new Vue({
el: '#app',
data: {
items: ['张三', '李四', '王五']
},
methods: {
click: function () {
this.items.splice(1, 1, '李大大');
this.items.pop();
this.items.push('赵六')
}
}
})
</script>
  • 遍历数组
// items: ['张三', '李四', '王五']

// 值
<ul>
<li v-for='item in items'>{{ item }}</li>
</ul>
<!-- 值, 索引,一般列表渲染需要建立缓存 -->
<ul>
<li v-for='(item, index) in items' :key="index">{{ index }} - {{ item }}</li>
</ul>
  • 遍历对象
// {'name': '张三', 'age': 18, 'sex': '男'}

// 值
<div v-for="value in object">
{{ value }}
</div>
// 值, 键
<div v-for="(value, key) in object">
{{ key }}: {{ value }}
</div>
// 值, 键, 索引
<div v-for="(value, key, index) in object">
{{ index }}. {{ key }}: {{ value }}
</div>
  • 嵌套数据渲染
// items: [{'name': '张三'}, {'age': 18}, {'sex': '男'}]
<div>
<div>{{ items[0].name }}</div>
<div>{{ items[1].age }}</div>
<div>{{ items[2].sex }}</div>
</div>

v-if、v-show与v-for案例

  • v-if
<head>
<meta charset="UTF-8">
<title>条件渲染</title>
<style type="text/css">
.box {
width: 200px;
height: 200px;
} .r {
background-color: red
} .o {
background-color: orange
}
</style>
<style type="text/css">
ul {
margin: 0;
padding: 0;
list-style: none;
}
.wrap, .main {
width: 500px;
height: 240px;
}
li {
float: left;
background-color: #666;
margin-right: 20px;
}
ul:after {
content: "";
display: block;
clear: both;
}
.red {background-color: red}
.green {background-color: green}
.blue {background-color: blue}
</style>
</head>
<body>
<div id="app">
<ul>
<li @mouseover="changeWrap(0)">red</li>
<li @mouseover="changeWrap(1)">green</li>
<li @mouseover="changeWrap(2)">blue</li>
</ul>
<!-- red页面逻辑结构 -->
<div class="wrap red" v-if="tag == 0" key="0">...</div>
<!-- green页面逻辑结构 -->
<div class="wrap green" v-else-if="tag == 1" key="1">...</div>
<!-- blue页面逻辑结构 -->
<div class="wrap blue" v-else key="2">...</div>
</div>
</body>
<script src="js/vue-2.5.17.js"></script>
<script>
new Vue({
el: "#app",
data: {
isShow: false,
tag:""
},
methods: {
changeWrap(num) {
this.tag = num;
}
}
})
</script>
  • v-show
<style type="text/css">
.btn_wrap {
width: 660px;
margin: 0 auto;
}
.btn_wrap:after {
content: '';
display: block;
clear: both;
}
.btn {
width: 200px;
height: 40px;
border-radius: 5px;
float: left;
margin: 0 10px 0;
}
.box {
width: 660px;
height: 300px;
}
.b1 {background-color: red}
.b2 {background-color: orange}
.b3 {background-color: cyan} .box_wrap {
width: 660px;
margin: 10px auto;
}
</style> <div id="app">
<div class="btn_wrap">
<div class="btn b1" @click='setTag(0)'></div>
<div class="btn b2" @click='setTag(1)'></div>
<div class="btn b3" @click='setTag(2)'></div>
</div>
<div class="box_wrap">
<div class="box b1" v-show='isShow(0)'></div>
<div class="box b2" v-show='isShow(1)'></div>
<div class="box b3" v-show='isShow(2)'></div>
</div>
</div> <script type="text/javascript">
new Vue({
el: '#app',
data: {
tag: 0
},
methods: {
isShow (index) {
return this.tag === index;
},
setTag (index) {
this.tag = index;
}
}
})
</script>
  • v-for
<div id="app">
<div>
<input type="text" v-model="inValue">
<button @click='pushAction'>提交</button>
</div>
<ul>
<li @click='deleteAction(index)' v-for="(item, index) in list" :key="index">{{ item }}</li>
</ul>
</div> <script type="text/javascript">
new Vue({
el: '#app',
data: {
inValue: '',
list: []
},
methods: {
pushAction: function () {
this.list.push(this.inValue);
this.inValue = ''
},
deleteAction: function (index) {
this.list.splice(index, 1);
}
}
})
</script>

前端(二十一)—— vue指令:文本类指令、避免页面闪烁、v-bind指令、v-on指令、v-model指令、条件渲染指令、列表渲染指令的更多相关文章

  1. 【Vue】Vue框架常用知识点 Vue的模板语法、计算属性与侦听器、条件渲染、列表渲染、Class与Style绑定介绍与基本的用法

    Vue框架常用知识点 文章目录 Vue框架常用知识点 知识点解释 第一个vue应用 模板语法 计算属性与侦听器 条件渲染.列表渲染.Class与Style绑定 知识点解释 vue框架知识体系 [1]基 ...

  2. 前端vue之属性指令、style和class、条件渲染、列表渲染、事件处理、数据双向绑定、表单控制、v-model进阶

    今日内容概要 属性指令 style和class 条件渲染 列表渲染 事件处理 数据的双向绑定 v-model进阶 购物车案例 内容详细 1.属性指令 <!DOCTYPE html> < ...

  3. 前端之CSS字体和文本类属性

    一.字体类属性: 1.字体类型: font-family:字体1,字体2,字体3; 常用写法: font-family:"微软雅黑",Arial; 注:a) 多个字体之间用逗号分隔 ...

  4. 前端MVC Vue2学习总结(四)——条件渲染、列表渲染、事件处理器

    一.条件渲染 1.1.v-if 在字符串模板中,如 Handlebars ,我们得像这样写一个条件块: <!-- Handlebars 模板 --> {{#if ok}} <h1&g ...

  5. vue学习笔记(五)条件渲染和列表渲染

    前言 在众多的编程语言中,我们的基础语法总是少不了一些专业语法,比如像定义变量,条件语句,for循环,数组,函数等等,vue.js这个优秀的前端框架中也有同样的语法,我们换一个名词,将条件语句改成专业 ...

  6. vue的条件渲染和列表渲染介绍

    一.条件渲染 1.v-if语句 <div v-if="seen">hahahah</div> <!-- v-if插入或者删除元素的指令 --> ...

  7. vue 条件渲染与列表渲染

    本文是对官方文档的整理 因为 v-if 是一个指令,所以必须将它添加到一个元素上.但是如果想切换多个元素呢?此时可以把一个 <template> 元素当做不可见的包裹元素,并在上面使用 v ...

  8. Vue.js学习 Item7 -- 条件渲染与列表渲染

    v-if 在字符串模板中,如 Handlebars,我们得像这样写一个条件块: <!-- Handlebars 模板 --> {{#if ok}} <h1>Yes</h1 ...

  9. angular,vue,react的基本语法—双向数据绑定、条件渲染、列表渲染、angular小案例

    基本语法: 1.双向数据绑定 vue 指令:v-model="msg" react constructor(){ this.state{ msg:"双向数据绑定" ...

  10. vue class与style绑定、条件渲染、列表渲染

    列表渲染 根据我例子的需要,先来说下,列表渲染使用到的是v-for指令,需要使用 item in items 形式的特殊语法,items 是源数据数组并且 item 是数组元素迭代的别名,具体使用方法 ...

随机推荐

  1. 重写__eq__函数——对象list中使用in index()——获得list中不同属性对象个数

    https://blog.csdn.net/anlian523/article/details/80868961

  2. 详解代理自动配置 PAC

    转自知乎 最近一直在做跨域中华局域网的工作,了解了很多代理知识和基础概念,很零散,也很细碎.希望通过一段时间的学习,能够自由地穿梭在国际互联网和中华局域网之间.后续会写一系列文章记录我了解到的知识点, ...

  3. charles使用教程

    概述 Charles是目前最强大的http调试工具,在界面和功能上远胜于Fiddler,同时是全平台支持.是收费软件,可以试用15分钟,下面提供了破解方法.   安装破解 https://www.cn ...

  4. Java语言基础及java核心

    一.Java语言特点 1. 简单 2. 面向对象 3. 分布式 4. 健壮 5. 安全 6. 中性架构跨平台 7. 超强的可移植性 8. 高性能 9. 多线程 二.java的环境变量 JAVA_HOM ...

  5. zabbix--ODBC 监控mysql

    zabbix ODBC 数据库监控ODBC 是 C 语言开发的.用于访问数据库的中间件接口.zabbix 支持查询任何 ODBC 支持的数据库.zabbix 通过调用ODBC 来获取数据库的数据以及数 ...

  6. CSUST 集训队选拔赛题解

    选拔赛的题解,~~~ 题目链接:请点击 A题 素数筛 + 线段树(树状数组) 先用素数筛打表,然后线段树更新,遍历求出值,O(1)查询即可 AC代码: /*num数组 是把记录 数是否存在 存在即为1 ...

  7. 聊聊redis实际运用及骚操作

    前言 聊起 redis 咱们大部分后端猿应该都不陌生,或多或少都用过.甚至大部分前端猿都知道. 数据结构: string. hash. list. set (无序集合). setsorted(有序集合 ...

  8. opensns的URL模式

    URL模式 如果我们直接访问入口文件的话,由于URL中没有模块.控制器和操作,因此系统会访问默认模块(Home)下面的默认控制器(Index)的默认操作(index),因此下面的访问是等效的: htt ...

  9. WPF datagrid/gridcontrol 中选中多行,复制粘贴到excel或其他文本编辑器中

    wpf中 data grid 开启自带的选中,然后复制,可以到excel中直接粘贴,在某些业务场景中很实用,方便.开启也很简单: SelectionMode="Row" 加上这个, ...

  10. Git分布式版本控制系统(上)

    Git分布式版本控制系统(上) 链接:https://pan.baidu.com/s/1CgaEv12cwfbs5RxcNpxdAg 提取码:fytm 复制这段内容后打开百度网盘手机App,操作更方便 ...