目录:Vue其他篇

01: vue.js安装

02: vue.js常用指令

03: vuejs 事件、模板、过滤器

目录:

1.1 事件返回顶部

  1、说明

      1. 绑定事件的两种方法:

        <button @click="showMsg">按钮</button>
        <button v-on:click="test('123', true, color, $event)">新的按钮</button> <!-- $event 传递事件对象 -->

      2. 回调函数在vue的methods属性中定义,如果参数集合()没有定义,回调函数有一个默认参数 this

      3. 作用域是vue实例化对象,所以在回调函数中,可以通过this访问vue上的数据

      4. 所以methods中定义的方法,可以在methods,以及computed等方法中使用

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div id="app">
<button @click="showMsg">按钮</button>
<button v-on:click="test('123', true, color, $event)">新的按钮</button> <!-- $event 传递事件对象 -->
</div>
<script type="text/javascript" src="vue.js"></script>
<script type="text/javascript">
// 定义vue实例化对象
var app = new Vue({
el: '#app',
data: {
color: 'red'
},
// 回调函数定义在methods属性中
methods: {
// 每一个属性代表一个方法
showMsg: function() {
console.log(this ,arguments)
},
// 定义回调函数
test: function() {
console.log(this, arguments) // arguments = ["123", true, "red", MouseEvent]
}
}
})
</script>
</body>
</html>

vue绑定事件

  2、事件冒泡和默认行为

      事件冒泡:当内存外层都绑定 如 点击事件时,只让最内层事件执行

      默认行为:如 a 标签点击默认会跳转到 href 地址中,然其点击后不跳转

      一次触发:<button @click.once="print">  只触发一次 </button>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>事件冒泡和默认行为</title>
<script src="js/vue.js"></script>
<script>
window.onload=function(){
let vm=new Vue({
el:'#itany',
methods:{
show(){
console.log(111);
// e.stopPropagation();
},
print(){
console.log(222);
},
write(){
console.log(333);
},
study(){
console.log(444);
// e.preventDefault();
}
}
});
}
</script>
</head>
<body>
<div id="itany">
<div @click="write">
<p @click="print">
<!-- <button @click="show($event)">点我</button> -->
<button @click.stop="show">点我</button>
</p>
</div>
<hr> <!-- <a href="#" @click="study($event)">俺是链接</a> -->
<a href="#" @click.prevent="study">俺是链接</a>
</div>
</body>
</html>

事件冒泡和默认行为

  3、事件修饰符(监控enter、up、down等键盘) 

      1. 绑定键盘事件的时候,经常会判断按键,通过 e.keyCode

      2.  事件修饰符语法 v-on:keyup.修饰符=”回调函数()”,表示,当按下的键是修饰符的时候才会触发

      3. 在vue中常见的有9个 esc, tab, space, enter, delete, up,down,left,right

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div id="app">
<input type="text" @keyup.enter="showValue">
<h1>{{msg}}</h1>
</div>
<script type="text/javascript" src="vue.js"></script>
<script type="text/javascript">
// 定义vue实例化对象
var app = new Vue({
el: "#app",
data: {
msg: ''
},
methods: {
showValue: function(e) {
// console.log(e.target.value)
// 判断点击回车键
// if (e.keyCode === 13) {
// // 作用域是vue实例化对象
// this.msg = e.target.value
// }
console.log(1111);
this.msg = e.target.value; // e.target.value 获取的是输入框的值 }
}
})
</script>
</body>
</html>

监控enter键事件

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>键盘事件</title>
<script src="js/vue.js"></script>
<script>
/**
* 自定义键位别名
*/
Vue.config.keyCodes={
a:65,
f1:112
} window.onload=function(){
let vm=new Vue({
el:'#itany',
methods:{
show(e){
console.log(e.keyCode);
if(e.keyCode==13){
console.log('您按了回车');
}
},
print(){
// console.log('您按了回车');
// console.log('您按了方向键上');
console.log('11111');
}
}
});
}
</script>
</head>
<body>
<div id="itany">
<!-- 键盘事件:@keydown、@keypress、@keyup -->
<!-- 用户名:<input type="text" @keydown="show($event)"> --> <!-- 简化按键的判断 -->
<!-- 用户名:<input type="text" @keydown="show($event)"> -->
<!-- 用户名:<input type="text" @keydown.13="print"> -->
<!-- 用户名:<input type="text" @keydown.enter="print"> -->
<!-- 用户名:<input type="text" @keydown.up="print"> -->
用户名:<input type="text" @keydown.f1="print"> <!-- 事件修饰符 -->
<button @click.once="print">只触发一次</button>
</div>
</body>
</html>

自定义键位别名

  4、事件修饰符

      .stop - 调用 event.stopPropagation()。

      .prevent - 调用 event.preventDefault()。

      .{keyCode | keyAlias} - 只当事件是从特定键触发时才触发回调。

      .native - 监听组件根元素的原生事件。

      .once - 只触发一次回调。

<template>
<button @click="submit()" :disabled="isDisable">点击</button>
</template>
<script>
export default {
name: 'TestButton',
data: function () {
return {
isDisable: false
}
},
methods: {
submit() {
this.isDisable = true
setTimeout(() => {
this.isDisable = false
}, 1000)
}
},
}
</script>

防止多次提交

  5、事件绑定常用方法

'''一:鼠标事件'''
# click 当用户点击某个对象时调用的事件句柄。
# contextmenu 在用户点击鼠标右键打开上下文菜单时触发
# dblclick 当用户双击某个对象时调用的事件句柄。
# mousedown 鼠标按钮被按下。
# mouseenter 当鼠标指针移动到元素上时触发。
# mouseleave 当鼠标指针移出元素时触发
# mousemove 鼠标被移动。
# mouseover 鼠标移到某元素之上。
# mouseout 鼠标从某元素移开。
# mouseup 鼠标按键被松开。 '''二:键盘事件'''
# keydown 某个键盘按键被按下。
# keypress 某个键盘按键被按下并松开。
# keyup 某个键盘按键被松开。

事件绑定常用方法

1.2 模板返回顶部

  1、简介

      Vue.js使用基于HTML的模板语法,可以将DOM绑定到Vue实例中的数据

      模板就是{{}},用来进行数据绑定,显示在页面中,也称为Mustache语法

  2、数据绑定的方式

      a.双向绑定   

        v-model

      b.单向绑定

        方式1:使用两对大括号{{}},可能会出现闪烁的问题,可以使用v-cloak解决

        方式2:使用v-text、v-html

  3、其他指令

      v-once 数据只绑定一次

      v-pre 不编译,直接原样显示

      官网指令: https://cn.vuejs.org/v2/api/#v-once

1.3 自定义过滤器 返回顶部

  1、说明

      1. 在vue升级之后,vue不建议使用过滤器,而是用插值表达式,或者动态数据绑定替换

      2. 使用过滤器的目的是为了在组件间复用处理数据的业务逻辑

      3. Vue类中存在一个静态方法filter方法,用来定义过滤器

  2、使用过滤器(过滤器定义必须在实例化vue对象前)

      1. 语法 {{数据 | 过滤器名称 参数1 参数2 参数3 | 过滤器2 参数2}}

      2. 可以使用多个过滤器,前一个过滤器的输出将作为后一个过滤器的输入

      3. 2.0版本的改动 {{数据 | 过滤器(参数1, 参数2)}}  (2.0版本对过滤器的传参做了改动)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div id="app">
<p> price: 数据 currency: 过滤器名称 ¥和3:表示传递的参数 </p>
<h1>{{price | currency('¥', 3)}}</h1>
</div>
<script type="text/javascript" src="vue.js"></script>
<script type="text/javascript">
/**
* 自定义过滤器
* currency 过滤器名称
* @price 价格
* @sign 价格标志
* @len 小数位保留的长度
**/
Vue.filter('currency', function(price, sign, len) { // 从第二个开始才是传递的参数
price = Math.abs(price); // 保证是正数
sign = sign || '¥'; // 默认为人命币标志
len = len || 2; // 默认保留两位小数
var arr = String(parseInt(price)).split(''); // arr = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
for (var i = arr.length - 3; i > 0; i -= 3) { // 添加了成员后面的位置变了,所以从后向前遍历,首位不能添加
arr.splice(i, 0, ',') // i(插入的索引位置);0(删除0个字符串); ','(添加的符合)
} // for循环后 arr = [1, 2, ',', 3, 4, 5, ',', 6, 7, 8]
return sign + arr.join('') + (price - parseInt(price)).toFixed(len).slice(1) // 转化成小数 原数字减去整数 保留len位小数,去掉整数部分
// toFixed(len) 保留len位小数(得到结果是字符串)
// 0.23456.toFixed(3) = "0.235" "'0.235'.slice(1) = ".235"
});
new Vue({
el: '#app',
data: {
price: 1234567891.1234567,
msg: 'a hot day'
}
})
</script>
</body>
</html>

自定义过滤器

    

1.4 过度返回顶部

  1、说明

      1. 在元素切换状态的时候(例如:元素的显隐),我们可以为元素添加动画
      2. Transition属性:Vue会根据属性值自动创建三个css类,例如 transition=“demo”
          demo-transition: 定义过渡的
          demo-enter 进入样式
          demo-leave 移出样式
      3. 注意:2.0类的名称变
          .demo-transition  =>  .demo-enter-active,  .demo-leave-active
          .demo-enter   =>  .demo-enter
          .demo-leave  =>  .demo-leave-to
          Transition属性 变成了 transition组件了,通过name定义过渡名称

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
.demo {
width: 100px;
height: 100px;
margin-top: 20px;
background: green;
}
/*定义过渡*/
.demo-enter-active,
.demo-leave-active {
transition: all 1s;
}
/*定义进场动画和出场动画*/
.demo-enter,
.demo-leave-to {
width: 0;
height: 0;
opacity: 0;
}
</style>
</head>
<body>
<div id="app">
<button v-on:click="toggle">切换显隐</button>
<transition name="demo">
<div class="demo" transition="demo" v-if="isShow">这是内容</div>
</transition>
</div>
<script type="text/javascript" src="vue.js"></script>
<script type="text/javascript">
// 定义vue实例化对象
var app = new Vue({
el: '#app',
data: {
isShow: true
},
methods: {
toggle: function() {
// 切换isShow
this.isShow = !this.isShow;
}
}
})
</script>
</body>
</html>

过度

    

1.5 支付宝注册返回顶部

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
* {
margin: 0;
padding: 0;
list-style: none;
}
body {
background: #ccc;
}
#app {
width: 800px;
margin: 50px auto;
border: 1px solid #ccc;
background: #fff;
height: 600px;
padding-top: 80px;
}
label {
margin-left: 100px;
margin-right: 20px;
}
input {
padding: 8px 15px;
width: 300px;
}
ul {
width: 330px;
margin-left: 176px;
border: 2px solid #ccc;
margin-top: -1px;
}
ul li {
padding: 0 15px;
height: 26px;
line-height: 26px;
}
ul li:hover,
ul li.hover {
background: #efefef;
}
</style>
</head>
<body>
<div id="app">
<label>账户名</label>
<input
type="text"
v-model="msg"
@keydown.up="showPrevLi"
@keyup.down="showNextLi"
@keyup.enter="chooseLi"
>
<!-- ul的显示与msg有关 -->
<ul v-show="msg">
<li v-for="item in dealMail" v-on:click="chooseCurrentLi">{{dealMsg}}@{{item}}.<template v-if="item == 189">cn</template><template v-else>com</template></li>
</ul>
</div>
<script type="text/javascript" src="vue.js"></script>
<script type="text/javascript">
// 创建vue实例化对象
var app = new Vue({
el: '#app',
data: { // 定义绑定的数据
msg: '',
num: -1,
isFirst: true, // 是否是第一次
email: ['qq', 163, 126, 189, 'sina', 'hotmail', 'gmail', 'sohu', '21cn']
}, // 动态数据绑定
computed: {
dealMsg: function(vue) { // 处理msg, 截取@符号之前的
if (this.msg.indexOf('@') >= 0){ // 是否存在@
// 截取@符号之前的,不包括@, slice, substring, substr, 哪个参数表示长度,出现负数,第一个参数大于第二个参数怎么办,李鹏涛
return this.msg.slice(0, this.msg.indexOf('@'))
}
return this.msg // 否则返回msg
}, // 过滤mail集合
dealMail: function() {
if (this.msg.indexOf('@') > 0) { // 判断是否包含@, 包含@,根据@符号后面的内容过滤
var str = this.msg.slice(this.msg.indexOf('@') + 1); // 截取@后面的内容
var result = []; // 过滤email集合
for (var i = 0; i < this.email.length; i++) { // 遍历email找到符号条件的
var mail = this.email[i] + (this.email[i] == 189 ? '.c' : '.co'); // 每一个成员要带上后缀,例如sina => sina.co
if (mail.indexOf(str) === 0) { // 什么成员符合条件:以str开头,
result.push(this.email[i]) // 存储这个成员
}
}
return result; // 返回过滤的结果
}else {
return this.email // 不包含,直接返回email
}
}
}, // 定义事件回调函数
methods: {
chooseCurrentLi: function(e) { // 点击li,然后选中li
var val = e.target.innerHTML; // 获取li的内容
this.msg = val; // 更新msg
}, // 点击向上键,显示前一个li
showPrevLi: function(e) {
e.preventDefault(e); // 阻止默认行为
if (this.isFirst) { // 如果是第一次,不用减了
this.isFirst = false; // 这次过去了,就不是第一次了
} else {
this.num--;
}
this.changeCurrentLiStyle(); // 更新li的样式
}, // 点击向下键,显示后一个li
showNextLi: function() {
this.num++; // 更改num
this.changeCurrentLiStyle(); // 更新li的样式
this.isFirst = false; // 第一次已经过去了
}, getNum: function(len) { // 获取num对应的li的索引值
// 对于任意一个数(正数和负数)
// 对len取余之后,保证在-len到len之间
// var num = this.num % len;
// // 此时加上len,保证是0到2*len之间,一定是正数了
// num += len;
// // 此时再取余,就保证是0到len之间了
// num %= len
return (this.num % len + len) % len;
}, // 改变当前li的样式
changeCurrentLiStyle: function() {
var lis = this.$el.getElementsByTagName('li'); // 获取所有的li
if (lis.length === 0) { // 判断li是否存在
return;
}
var num = this.getNum(lis.length); // 获取索引值
for (var i = 0; i < lis.length; i++) { // 排他法设置类
lis[i].className = '';
}
lis[num].className = 'hover'; // 当前li选中
}, // 点击enter键,显示当前li
chooseLi: function() {
var lis = this.$el.getElementsByTagName('li'); // 获取对应的li
if (lis.length === 0) { // 判断li是否存在
return;
}
var num = this.getNum(lis.length); // 获取索引值
var value = lis[num].innerHTML; // 获取li的值
this.msg = value;
}
}
})
</script>
</body>
</html>

支付宝注册

    

03: vuejs 事件、模板、过滤器的更多相关文章

  1. Django-2- 模板路径查找,模板变量,模板过滤器,静态文件引用

    模板路径查找 路径配置 2. templates模板查找有两种方式 2.1 - 在APP目录下创建templates文件夹,在文件夹下创建模板 2.2 - 在项目根目录下创建templates文件夹, ...

  2. Django模板过滤器详解

    Django 模板过滤器也是我们在以后基于 Django 网站开发过程中会经常遇到的,如显示格式的转换.判断处理等.以下是 Django 过滤器列表,希望对为大家的开发带来一些方便. 一.形式:小写 ...

  3. Django框架之【自定义模板过滤器与标签】

    本文在我的微信公众号的链接:https://mp.weixin.qq.com/s?__biz=MzU5NTU5MjcwNw==&mid=2247483674&idx=1&sn= ...

  4. Django框架基础知识03-模板变量及模板过滤器

    模板变量及模板过滤器. 1.模板路径的查找 -查找顺序 1.尝试,在app目录下存放模板. -两种方案 1.app项目文件夹下存放. 2.templates文件夹下分类存放. 首先查找项目settin ...

  5. django-5-自定义模板过滤器及标签

    <<<代码布局(自定义的代码放哪里)>>> (1)某个app特有的  1.一般放app目录下 固定名为templatetags 的python文件夹里鸭,如果是别的 ...

  6. 3/21 Django框架 模板路径及模板过滤器 1.模板路径查找

    3/21 Django框架 模板路径及模板过滤器 1.模板路径查找 先找settings.py里的TEMPLATES列表下的DIRS路径.如果APP_DIRS为True,还会到注册了的APP文件夹下依 ...

  7. Django之模板过滤器

    Django 模板过滤器也是我们在以后基于 Django 网站开发过程中会经常遇到的,如显示格式的转换.判断处理等.以下是 Django 过滤器列表,希望对为大家的开发带来一些方便. 一.形式:小写 ...

  8. Django——模板层(template)(模板语法、自定义模板过滤器及标签、模板继承)

    前言:当我们想在页面上给客户端返回一个当前时间,一些初学者可能会很自然的想到用占位符,字符串拼接来达到我们想要的效果,但是这样做会有一个问题,HTML被直接硬编码在 Python代码之中. 1 2 3 ...

  9. $Django 模板层(变量、过滤器 、标签)、自定义(模板过滤器,标签)

    1 模版语法之变量:详见源码  -{{ 变量 }}:******重要******{#相当于print了该变量#} {#只写函数名 相当于()执行了#}<p>函数:{{ test }}< ...

随机推荐

  1. SPOJ MKTHNUM & POJ 2104 - K-th Number - [主席树模板题]

    题目链接:http://poj.org/problem?id=2104 Description You are working for Macrohard company in data struct ...

  2. Oracle性能优化之普通用户使用dbms_xplan包需要有的权限

    普通用户使用dbms_xplan包查看执行计划需要对v$sql.v$sql_plan.v$session及v$sql_plan_statistics_all这四个视图同时具有select权限. 如果普 ...

  3. android(二) SurfaceView

    (一)常用类介绍 (1). View:显示视图,内置画布,提供图形绘制函数.触屏事件.按键事件函数等:必须在UI主线程内更新画面,被动更新画面,速度较慢. (2). SurfaceView:基于vie ...

  4. Python3学习之路~2.3 字符串操作

    字符串操作 特性:不可修改 name="my \tname is alex" print(name.capitalize()) #首字母变大写 print('Alex LI'.ca ...

  5. Muse UI 样式

    Muse UI的icon是国外网站,被墙了所以用这个网址的icon,在index.html文件中引入下面链接: <link rel="stylesheet" href=&qu ...

  6. IO操作文件的复制与删除

    import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IO ...

  7. 微信小程序----团购或秒杀的批量倒计时实现

    效果图 实现思路微信小程序实现倒计时,可以将倒计时的时间进行每一秒的计算和渲染! JS模拟商品列表数据 goodsList:在 onLoad 周期函数中对活动结束时间进行提取:建立时间格式化函数 ti ...

  8. loadrunner怎么打印接口返回的参数

    //首先使用web_reg_save_param方法保存服务器返回的参数,如下: web_reg_save_param ("S_respond","LB=",& ...

  9. python处理图片验证码

    WebDriver中实现对特定的Web区域截图方法 import pytesseract from PIL import Image image=Image.open('new.jpg') vcode ...

  10. Vue.Js加入bootstrap及jquery,或加入其他插件vue-resource,vuex等

    .引入jquery 项目目录下输入 cnpm install jquery --save-dev      用npm下载jq依赖 若想加入其他js库,如vue-resource,执行命令cnpm in ...