一、过滤器

Vue中可以自定义过滤文本插值的过滤器。目前有两个地方可以使用:

  • 插值文本{{ var }}中使用。
  • v-bind中使用。( 2.1.0+ )

用法:使用管道连接符 | 将需要过滤的文本变量与过滤函数连接起来即可。

1、定义局部过滤器

在Vue实例中定义局部过滤器类似定义普通函数一样,使用关键字filters来定义,如定义一个大写首字母的过滤函数upperCaseFirst

Var app = new Vue({
el: '#app',
filters: {
upperCaseFirst: function(value){
if(!value) return '';
value = value.toString();
return value.charAt(0).tpUpperCase() + value.slice(1);
}
}
});
  • 参数

    过滤器的第一个参数默认为需要过滤的文本变量。

    可以在使用的使用传入其他参数(目前只能传入字符串,不能传入变量),如:

    {{ message | upperCaseFirst('s1','s2') }}

    但是需要注意对传入的参数进行必要性验证,因为不止此处会调用该过滤函数。

  • 返回值

    过滤函数的返回值将作为渲染结果或者下一个过滤器的第一个参数。

2、定义全局过滤器

类似。

Vue.filter('upperCaseFirst', function(value){
if(!value) return '';
value = value.toString();
return value.charAt(0).tpUpperCase() + value.slice(1);
})

二、事件处理

监听事件
事件处理方法
内联处理器中的方法
事件修饰符
按键修饰符
自动匹配按键修饰符
系统修饰键
.exact 修饰符
鼠标按钮修饰符
为什么在 HTML 中监听事件?

1、使用v-on指令监听事件

v-on指令可以绑定原生事件,也可以在组件中绑定自定义事件。

使用方法:

<button @click="say">Click me</button>

也可以使用内联语句:

<button @click="say(message)">Click me</button>
<button @click="say('okk')">Okk</button>
<button @click="say('okk',$event)">Okk</button>

还可以使用对象来绑定多个事件:

<button v-on="{ mousedown: doThis, mouseup: doThat }"></button>

2、事件修饰符

在定义事件处理函数时,我们常常使用到下面这些操作:

event.preventDefault();
event.stopPropagation();

所以为了方便且尽量不去处理事件细节,Vue定义了一些事件修饰符来满足一些事件处理需求

  • .stop:阻止事件传播。
  • .prevent:取消浏览器默认事件动作。
  • .capture:启用时间捕获模式。即元素自身触发的事件先在此处理,然后才交由内部元素进行处理。
  • .self:绑定事件的元素本身才能触发,即内部元素不能触发。
  • .once:(2.1.4 )事件只触发一次。
  • .passive:不让用户调用preventDefault(),所以不要和.prevent一起使用。

事件监听的原始参数定义规则请参考:这里

3、按键修饰符

某些事件如keydown | keyup与键盘直接相关,我们常常判断按键的类型或按键码(keyCode)再进行事件处理。

Vue提供的按键修饰符就是用来判断按键是否符合设置的修饰符,比如:

<input type="text" @keyup.13>

这里的keyCode就为13,当按键码为13时才会触发该事件。

为了方便使用,Vue预设了一些常用的按键别名代替按键码,

  • .enter
  • .tab
  • .delete (捕获“删除”和“退格”键)
  • .esc
  • .space
  • .up
  • .down
  • .left
  • .right

当然,我们也可以通过全局 config.keyCodes 对象自定义按键修饰符别名:

Vue.config.keyCodes.f1 = 112

4、系统修饰键

可以用如下修饰符来实现仅在按下相应按键时才触发鼠标或键盘事件的监听器。如:

<!-- Ctrl + Click -->
<div @click.ctrl="doSomething">Do something</div>
  • .exact修饰符(2.5.0+)

    exact是”精确的“的意思,使用.exact 修饰符允许你控制由精确的系统修饰符组合触发的事件。

    <!-- 即使 Alt 或 Shift 被一同按下时也会触发 -->
    <button @click.ctrl="onClick">A</button> <!-- 有且只有 Ctrl 被按下的时候才触发 -->
    <button @click.ctrl.exact="onCtrlClick">A</button> <!-- 没有任何系统修饰符被按下的时候才触发 -->
    <button @click.exact="onClick">A</button>
  • 鼠标按钮修饰符(2.2.0+)

    • left
    • middle
    • right

三、自定义指令

1、简介

Vue提供的指令都比较方便,Vue2.0 开始,Vue支持自定义指令。类似自定义过滤器(Filter)一样,指令(directive)也分为全局指令和局部指令。

  • 定义全局指令

    比如我们定义一个在元素插入父节点后聚焦元素的指令:

    Vue.directive('focus', {
    inserted: function(el){
    el.focus();
    }
    })
  • 定义局部指令

    类似。

    var app = new Vue({
    el: "#app",
    data: {
    message: 'Json',
    }
    directives: {
    'focus':{
    'inserted': function(el){
    el.focus();
    }
    }
    }
    });

2、钩子函数

​ 我们发现指令不只是一个简单的函数,而是一个对象,对象中包含了固定关键的函数,比如inserted,这些都是指令的钩子函数,不同的钩子函数指向元素不同的生命周期

​ Vue为指令提供了如下的钩子函数(均为可选):

  • bind

    指令第一次绑定到元素上时调用。可理解为指令的初始化方法。

  • inserted

    被绑定元素插入父节点时调用。(可以理解为有父节点时调用,而此时不一定已存在文档树中)。

  • update

    指令所在组件的VNode更新时调用,但可能在组件的子VNode更新前调用。

  • componentUpdated

    指令所在组件的VNode及其子VNode全部更新完成后调用。

  • unbind

    指令解绑时调用。

3、钩子函数的参数

钩子函数会传入以下某些参数,

  • el:绑定指令的元素
  • binding:一个具有如下属性的对象
    • name:不带v-的指令名
    • value:指令值,如v-my-directive="1 + 1" 中,绑定值为 2
    • oldvalue:指令绑定的前一次值。(仅在 updatecomponentUpdated 钩子中可用)
    • expression:字符串形式的指令表达式值。如如v-my-directive="1 + 1" 中,表达式为 1 + 1
    • arg:传给指令的参数,可选。例如 v-my-directive:foo 中,参数为 "foo"
    • modifiers:一个包含修饰符的对象。例如:v-my-directive.foo.bar 中,修饰符对象为 { foo: true, bar: true }
  • vnode:编译生成的虚拟节点
  • oldVnode:上一个虚拟节点,仅在 updatecomponentUpdated 钩子中可用。

注意:除了 el 之外,其它参数都应该是只读的,切勿进行修改。如果需要在钩子之间共享数据,建议通过元素的 dataset 来进行。

下面是一个简单的实例:

<div id="hook-arguments-example" v-demo:foo.a.b="message"></div>
Vue.directive('demo', {
bind: function (el, binding, vnode) {
var s = JSON.stringify
el.innerHTML =
'name: ' + s(binding.name) + '<br>' +
'value: ' + s(binding.value) + '<br>' +
'expression: ' + s(binding.expression) + '<br>' +
'argument: ' + s(binding.arg) + '<br>' +
'modifiers: ' + s(binding.modifiers) + '<br>' +
'vnode keys: ' + Object.keys(vnode).join(', ')
}
}) new Vue({
el: '#hook-arguments-example',
data: {
message: 'hello!'
}
})

4、简写形式

在很多时候,你可能想在 bindupdate 时触发相同行为,而不关心其它的钩子。比如这样写:

Vue.directive('color-swatch', function (el, binding) {
el.style.backgroundColor = binding.value
})

5、对象字面量

如果指令需要多个值,可以传入一个 JavaScript 对象字面量。记住,指令函数能够接受所有合法的 JavaScript 表达式。

<div v-demo="{ color: 'white', text: 'hello!' }"></div>
Vue.directive('demo', function (el, binding) {
console.log(binding.value.color) // => "white"
console.log(binding.value.text) // => "hello!"
})

参考:Vue-自定义指令

Vue(day2)的更多相关文章

  1. node day2 vue read html

    app.js var http = require("http"); var fs = require('fs'); var url = require('url'); http. ...

  2. VUE知识day2

    VUE用途 VUE:是用来做单页面的 掘金网单击时会创建对象与销毁,减少与服务器的交互 1模块使用------------------- 1导出------------ export default ...

  3. Vue.js - Day2

    品牌管理案例 添加新品牌 删除品牌 根据条件筛选品牌 1.x 版本中的filterBy指令,在2.x中已经被废除: filterBy - 指令 ​<tr v-for="item in ...

  4. Vue学习笔记Day2

    1.mustache语法 如何将data中的文本数据插入到HTML中? 通过使用mustache语法(也就是双大括号),将data中的变量名插入到HTML元素中,显示在页面上. 如下图:并且数据是响应 ...

  5. vue学习笔记2

    Vue.js - Day2 品牌管理案例 添加新品牌 删除品牌 根据条件筛选品牌 1.x 版本中的filterBy指令,在2.x中已经被废除: filterBy - 指令 <tr v-for=& ...

  6. Vue使用的一些实例

    1.实现歌曲的点击切换. <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  7. 05 vue项目01-组件关系、bootstrap

    1.django后端项目 1.项目预期 配置前端静态资源            页面展示 2.django项目代码 主url from django.contrib import admin from ...

  8. Vue入门到精通

    Vue.js - Day1 课程介绍 前5天: 都在学习Vue基本的语法和概念:打包工具 Webpack , Gulp 后5天: 以项目驱动教学: 什么是Vue.js Vue.js 是目前最火的一个前 ...

  9. Vue.js 和 MVVM 小细节

    MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自 ...

随机推荐

  1. plsql developer 中文乱码(???)解决办法

    添加环境变量 变量名称: NLS_LANG 内容: SIMPLIFIED CHINESE_CHINA.ZHS16GBK 再次新插入的数据就不会乱码了

  2. 为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作--java.util.ConcurrentModificationException

    摘要 foreach循环(Foreach loop)是计算机编程语言中的一种控制流程语句,通常用来循环遍历数组或集合中的元素. 在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体 ...

  3. javaScript -- touch事件详解(touchstart、touchmove和touchend)

    HTML5中新添加了很多事件,但是由于他们的兼容问题不是很理想,应用实战性不是太强,所以在这里基本省略,咱们只分享应用广泛兼容不错的事件,日后随着兼容情况提升以后再陆续添加分享.今天为大家介绍的事件主 ...

  4. Centos设置防火墙与开放访问端口

    一. jeuxs在启动后可能会出现启动jexus成功,但是访问失败.但是在服务器内部访问没问题. 列出所有端口 netstat -ntlp 查看已经开放的端口: firewall-cmd --list ...

  5. Spark SQL官网阅读笔记

    Spark SQL是Spark中用于结构化数据处理的组件. Spark SQL可以从Hive中读取数据. 执行结果是Dataset/DataFrame. DataFrame是一个分布式数据容器.然而D ...

  6. Flink RichSourceFunction应用,读关系型数据(mysql)数据写入关系型数据库(mysql)

    1. 写在前面 Flink被誉为第四代大数据计算引擎组件,即可以用作基于离线分布式计算,也可以应用于实时计算.Flink的核心是转化为流进行计算.Flink三个核心:Source,Transforma ...

  7. kafka单机搭建,并测试api

    所用环境: kafka_2.-.gz centos 6.9 nat动态ip 准备工作: ().将防火墙关闭 service iptables stop 临时关闭 chkconfig iptables ...

  8. 关于定时脚本crontab的坑

    需求: 每分钟执行一次程序,将处理后的数据写入mongodb 最初做法: 1):写crontab没有响应,于是打算通过shell脚本的while true来执行 当时sb,没控制时间内,而且我还是用n ...

  9. vue基础4-数据绑定

    1.v-bind 只能实现数据额单向绑定,从M到V,无法实现数据的双向绑定 改变页面输入框的值,打印数据并未改变. 2.v-model 可以实现数据的双向绑定,从M到V.V到M.  注意:v-mode ...

  10. 防御xss 大致理解

    前端 发送留言内容 包含 js 代码 后台 管理员 查看 留言 代码被执行 拿到cookie 成功登陆 解决办法 对录入 进行相关的过滤处理 其他解决方法 正在学习中