文本类指令、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. cs224d 作业 problem set2 (二) TensorFlow 实现命名实体识别

    神经网络在命名实体识别中的应用 所有的这些包括之前的两篇都可以通过tensorflow 模型的托管部署到 google cloud 上面,发布成restful接口,从而与任何的ERP,CRM系统集成. ...

  2. Linux用ifconfig设置IP、掩码、网关

    ifconfig eth0 ip netmask 255.255.255.0 route add default gw 网关

  3. C#cs编译成dll命令提示符

    csc /t:library  /out:F:\Provider.dll /r:F:\BPM.dll /r:F:\BPM.Server.dll F:\Provider.cs

  4. 力扣算法——140WordBreakII【H】

    Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, add space ...

  5. 一个线上Java空指针问题的排查经过

    某天,运营反馈,某商品下单异常 1.原来是一个空指针报错 根据用户输入的下单关键信息搜索日志系统看到如下报错 stackTrace: "java.lang.NullPointerExcept ...

  6. 20140904 atoi字符串转化为整数源码

    1.atoi源码 #include<stdio.h> #include<assert.h> bool isdigit1(char c) { ') return true; el ...

  7. spring配置mybatis的sqlsessionfactory

    <!--读入配置文件 --> <bean id="propertyConfigurer" class="org.springframework.bean ...

  8. layout(布局)组件

    一.依赖于 Panel(面 板)组件和 resizable(调整大小)组件. 二.class加载方式    <div id="box" class="easyui- ...

  9. VUE.JS 环境配置

    首先安装   node.js 网址 https://nodejs.org/en/ 选择版本 点击直接安装OK  (不用安装到系统盘) 然后cmd 命令框 输入 npm -version (查看安装版本 ...

  10. tf.placeholde函数解释与用法

    函数原型:tf.placeholder(dtype, shape=None, name=None) 使用说明:该函数用于得到传递进来的真实的训练样本.同时也可以理解为形参, 用于定义过程,在执行的时候 ...