Vue 之指令篇
文件指令
- <body>
<div id="app">
<!-- 1) 插值表达式 -->
<p>{{ msg }}</p>
<p>{{ 1 + 2 * 3 + '条' + msg }}</p>
<!-- 2) v-text -->
<p v-text="msg"></p>
<p v-text="'msg'"></p>
<!-- 3) v-html:能解析html代码语法 -->
<p v-text="html_msg"></p>
<p v-html="html_msg"></p>
<!-- 4) v-once:结合插值表达式来使用,变量值一旦被初始化赋值后就不会再改变 -->
<input type="text" v-model="val">
<p>{{ val }}</p>
<p v-text="val"></p>
<p v-html="val"></p>
<p v-once>{{ val }}</p>
</div>
</body>
<script src="js/vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
msg: '你是p',
html_msg: '<b>html语法代码是否解析</b>',
val: '000'
}
})
</script>
属性指令
- # 1.v-bind:属性名="变量"
# 2.简写=> :属性名="变量"
# 3.:class="变量" | :class="{类名:is_able}" | :class="[类1变量, ..., 类n变量,]"
- <head>
<meta charset="UTF-8">
<title>属性指令</title>
<style>
.cls_a {
width: 200px;
height: 200px;
background-color: yellowgreen;
}
.cls_b {
text-align: center;
line-height: 200px;
border-radius: 50%;
}
</style>
</head>
<body>
<!-- 属性指令:v-bind -->
<div id="app">
<!-- 1) 自定义属性绑定变量 -->
<p v-bind:abc="a"></p>
<!-- 2) title属性 -->
<p title="鼠标悬浮的文本提示">这是一个p段落</p>
<p v-bind:title="my_title">这是一个p段落</p>
<!-- 3) class属性 -->
<!-- 重点:v-bind: 可以简写为 : -->
<!-- my_class可以被任意赋值 -->
<p :class="my_class">这是一个p段落</p>
<!--{类名:类是否起作用, ...} 类是否起作用 写的是变量,变量的值为true或false-->
<!--应用场景:通过一个变量真假控制一个类名是否起作用-->
<p :class="{x:1, y:0, z:is_able}">这是一个p段落</p>
<!--[类名1, ..., 类名n]: 多类名,每一个类名既可以是字符串常量也可以是变量-->
<p :class="[o, p, q, 'oqp']">这是一个p段落</p>
<!--多类名综合使用-->
<p :class="[o, p, q, 'oqp', {k: true}, {h: false}]">这是一个p段落</p>
<!-- 4) style属性 -->
<p :style="my_style">这是一个p段落</p>
<p :style="{color: 'red', backgroundColor: yellow}">这是一个p段落</p>
</div>
</body>
<script src="js/vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
a: 'A',
my_title: '鼠标悬浮的文本提示',
my_class: 'cls_a cls_b',
is_able: true,
o: 'O',
p: 'P',
q: 'Q',
my_style: {
color: 'red',
// 'font-size': '30px'
fontSize: '30px'
},
yellow: 'greenyellow'
}
})
</script>
事件指令
- # 指令:v-on:事件名="方法变量"
# 简写:@事件名="方法变量"
# 简写:@事件名="方法变量()" => 不是方法的调用,而是用于传参
# 简写:@事件名="方法变量('普通参数', $event)" => $event是事件参数,可以通过它得到鼠标点击的相关信息
- <body>
<!-- 指令:v-on:事件名="变量" -->
<!-- 简写:@事件名="变量" -->
<div id="app">
<p v-on:click="fn1" :style="{color: m_c}">{{ msg }}</p>
<p @mouseover="fn2" @mouseleave="fn3" @mousedown="fn4" @mouseup="fn5">{{ msg }}</p>
<!--事件需要参数时-->
<!-- 注意:事件绑定 方法名() 等价 方法名,不能调用方法,而是作为传参的标志 -->
<p @click="func('abc')">{{ msg }}</p>
<!--类别django传参的应用场景,可以标识具体点击的是哪个li-->
<!--{% for %}-->
<!--<li @click="func({{forloop.index}})"></li>-->
<!--{% end for%}-->
<!--传入事件对象-->
<p @click="func1($event)">{{ msg }}</p>
</div>
</body>
<script src="js/vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
msg: '你是p',
m_c: 'red'
},
methods: {
func1: function (ev) {
console.log(ev);
// 数据点击页面的点击点
console.log(ev.clientX);
console.log(ev.clientY);
},
func: function (txt) {
this.msg = txt
},
fn1: function () {
if (this.m_c == 'red') {
this.m_c = 'blue'
} else {
this.m_c = 'red'
}
},
fn2: function () {
this.msg = '鼠标悬浮了'
},
fn3: function () {
this.msg = '鼠标离开了'
},
fn4: function () {
this.msg = '鼠标按下了'
},
fn5: function () {
this.msg = '鼠标抬起了'
}
}
})
</script>
表单事件
- <body>
<div id="app">
<!-- 指令:v-model="变量" -->
<form action="" method="get">
<!-- 1) 数据的双向绑定 -->
<input type="text" v-model="msg" name="usr">
<input type="password" v-model="msg" name="pwd">
<!-- 2) 单选框: value必须设置初值,v-model变量值要与单选框的value值统一 -->
<p>
男:<input type="radio" name="sex" value="male" v-model="sex_val">
女:<input type="radio" name="sex" value="female" v-model="sex_val">
</p>
<!--3)单一复选框-->
<p>
<!-- v-model绑定的变量值与true-value|false-value统一 -->
<!-- true-value|false-value默认值为 true | false -->
是否同意条款:<input type="checkbox" name="agree" v-model="agree_val"
true-value="同意" false-value="不同意">
</p>
<!-- 4) 多复选框 -->
<!-- v-model绑定的变量是存放多复选框value的数组(列表) -->
<p>
爱好:
<input type="checkbox" value="喜好男的" name="cless" v-model='more_val' />
<input type="checkbox" value="喜好女的" name="cless" v-model='more_val' />
<input type="checkbox" value="不挑" name="cless" v-model='more_val' />
</p>
<button type="submit">提交</button>
</form>
</div>
</body>
<script src="js/vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
msg: '',
sex_val: 'female', // 默认value="female"的单选框被选中
agree_val: '不同意',
more_val: ['喜好男的', '喜好女的']
}
})
</script>
条件指令
- <head>
<meta charset="UTF-8">
<title>文本指令</title>
<style>
.box {
width: 200px;
height: 100px;
background-color: darkgray;
}
.pg1 { background-color: red; }
.pg2 { background-color: yellow; }
.pg3 { background-color: blue; }
</style>
</head>
<body>
<div id="app">
<!-- v-if与v-show的变量值都是bool,控制着显隐 -->
<!-- v-if隐藏时标签不被渲染,v-show隐藏时标签渲染,用display:none来隐藏 -->
<!-- 特殊属性key是vue在内存中建立缓存的标志, 来优化渲染的效率 -->
<p v-if="is_if" key="my_if">v-if的显示与隐藏</p>
<p v-show="is_show" key="my_show">v-show的显示与隐藏</p>
<p>
<button @click="btn_click('pg1')">红</button>
<button @click="btn_click('pg2')">黄</button>
<button @click="btn_click('pg3')">蓝</button>
<div class="box pg1" v-if="pg == 'pg1'" key="pg1"></div>
<div class="box pg2" v-else-if="pg == 'pg2'" key="pg2"></div>
<div class="box pg3" v-else key="pg3"></div>
</p>
</div>
</body>
<script src="js/vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
is_if: true,
is_show: true,
pg: 'pg1'
},
methods: {
btn_click: function (pg_num) {
this.pg = pg_num
}
}
})
</script>
循环指令
- <head>
<meta charset="UTF-8">
<title>文本指令</title>
<style>
p {
padding-left: 30px;
}
</style>
</head>
<body>
<div id="app">
<p>{{ array[1] }}</p>
<p>{{ person['age'] }}</p>
<div>循环array</div>
<p v-for="v in array">{{ v }}</p>
<div>带索引循环array</div>
<p v-for="(v, i) in array">{{ v }}索引是{{ i }}</p>
<div>循环dict</div>
<p v-for="v in person">{{ v }}</p>
<div>带key循环dict</div>
<p v-for="(v, k) in person">{{ v }}键是{{ k }}</p>
<div>带key带索引循环dict</div>
<p v-for="(v, k, i) in person">{{ v }}键是{{ k }}索引是{{ i }}</p>
<ul v-for="person in persons">
<!--{{ person }}-->
<li v-for="(v, k) in person">{{ k }}: {{ v }}</li>
</ul>
</div>
</body>
<script src="js/vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
array: ['iso', 'android', 'winPhone'],
person: {'name': 'Jobs', 'age': 88, 'gender': '男'},
persons: [
{'name': 'Jason', 'age': 58},
{'name': 'Jerry', 'age': 68},
{'name': 'Owen', 'age': 17},
]
}
})
</script>
前端array的操作
- <script>
arr = [1, 2, 3, 4, 5];
console.log(arr);
// 从index开始往后操作length长度,替换为args
// arr.splice(index, length, args);
// arr.splice(2, 3, 9, 9); // [1, 2, 9, 9] 替换
// arr.splice(2, 3); // [1, 2] 删除
arr.splice(2, 0, 8); // [1, 2, 8, 3, 4, 5] 插入
console.log(arr);
</script>
留言案例
- <body>
<div id="app">
<input type="text" v-model="txt">
<button @click="send_msg">留言</button>
<ul>
<li v-for="(msg, i) in msg_arr" @click="delete_msg(i)">{{ msg }}</li>
</ul>
</div>
</body>
<script src="js/vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
txt: '',
// msg_arr: ['初始留言1', '初始留言2']
msg_arr: []
},
methods: {
send_msg: function () {
// this.txt
// this.msg_arr
if (this.txt) {
this.msg_arr.push(this.txt);
this.txt = ''
}
},
delete_msg: function (index) {
this.msg_arr.splice(index, 1)
}
}
})
</script>
Vue 之指令篇的更多相关文章
- vue之指令篇 ps简单的对比angular
这两天在开始vue的大型项目,发现和ng还是有许多不同,这里对比下两者的指令系统 难度系数:ng的指令难度大于vue:至少vue上暂时没发现@&=:require,compile,precom ...
- vue学习指南:第二篇(详细Vue基础) - Vue的指令
一. Vue 的介绍 1. vue是一个 mvvm 的框架.(面试官经常会问的),angular 是 mvc的框架. 2. vm 是 vum 的实例,这个实例存在计算机内存中,主要干两件大事: 1. ...
- Vue.js 源码分析(二十三) 指令篇 v-show指令详解
v-show的作用是将表达式值转换为布尔值,根据该布尔值的真假来显示/隐藏切换元素,它是通过切换元素的display这个css属性值来实现的,例如: <!DOCTYPE html> < ...
- Vue.js 源码分析(二十二) 指令篇 v-model指令详解
Vue.js提供了v-model指令用于双向数据绑定,比如在输入框上使用时,输入的内容会事实映射到绑定的数据上,绑定的数据又可以显示在页面里,数据显示的过程是自动完成的. v-model本质上不过是语 ...
- Vue.js 源码分析(十九) 指令篇 v-html和v-text指令详解
双大括号会将数据解释为普通文本,而非 HTML 代码.为了输出真正的 HTML,你需要使用 v-html 指令,例如: <!DOCTYPE html> <html lang=&quo ...
- Vue.js 源码分析(十六) 指令篇 v-on指令详解
可以用 v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码,例如: <!DOCTYPE html> <html lang="en"& ...
- Vue.js 源码分析(十五) 指令篇 v-bind指令详解
指令是Vue.js模板中最常用的一项功能,它带有前缀v-,比如上面说的v-if.v-html.v-pre等.指令的主要职责就是当其表达式的值改变时,相应的将某些行为应用到DOM上,先介绍v-bind指 ...
- Vue自定义指令使用场景
当你第一次接触vue的时候,一定会使用到其中的几个指令,比如:v-if.v-for.v-bind...这些都是vue为我们写好的,用起来相当的爽.如果有些场景不满足,需要我们自己去自定义,那要怎么办呢 ...
- vue 自定义指令的魅力
[第1103期]vue 自定义指令的魅力 点点 前端早读课 2017-11-08 前言 很多事情不能做过多的计划,因为计划赶不上变化.今日早读文章由富途@点点翻译分享. 正文从这开始- 在你初次接触一 ...
随机推荐
- 【转】跨域资源共享 CORS 详解
本文来源:http://www.ruanyifeng.com/blog/2016/04/cors.html 阮一峰老师的网络日志 CORS是一个W3C标准,全称是"跨域资源共享"( ...
- spring-cloud:eureka server单机、双机、集群示例
1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.GITHUB地址 https://github.com/nbfujx/springCl ...
- iis7反向代理
很多站长通常在Linux系统下使用nginx作为前端server,通过反向代理间接访问其他webserver.那么如果用户安装的是Windows系统的话,又改如何实现反向代理的设置呢?搜索引擎大全 下 ...
- php max()函数 语法
php max()函数 语法 作用:从所有参数中找到最大数 语法:max(X,Y,Z) 或者max(array(X,Y,Z)) 参数:max函数中参数至少一个,可以多个参数,也可以是数组. 说明:如果 ...
- mysql图形化管理工具workbench下载安装以及基本使用
1.下载安装 去mysql官网下载地址进行下载安装 2. 创建schema和表格等基本操作 (1)连接数据库 打开workbench,操作如下: ps:正常需要输入mysql的密码的,但是我之前保存了 ...
- CSS布局浮动和定位属性的区别
float: left|right; 可以自动排列自动折行, 但需要clear来配合清除浮动;display: inline-block 有些时候可以替代float实现相同的效果. position: ...
- SpringBoot 快速构建微服务体系 知识点总结
可以通过http://start.spring.io/构建一个SpringBoot的脚手架项目 一.微服务 1.SpringBoot是一个可使用Java构建微服务的微框架. 2.微服务就是要倡导大家尽 ...
- Python 进阶_闭包 & 装饰器
目录 目录 闭包 函数的实质和属性 闭包有什么好处 小结 装饰器 更加深入的看看装饰器的执行过程 带参数的装饰器 装饰器的叠加 小结 装饰器能解决什么问题 小结 闭包 Closure: 如果内层函数引 ...
- node_exporter + grafana
监控服务器CPU.内存.磁盘.I/O等信息,首先需要安装node_exporter.node_exporter的作用是用于机器系统数据收集. 下载安装: https://github.com/prom ...
- python多线程的几种情形分析-三种情况
情形一:默认情况 默认情况,只开启线程,那么,主线程结束,其他子线程可能还没结束. 只使用t=threading.Thead(target=fun),t.start(). import threadi ...