vue 指令和过滤器的基本使用(品牌管理案例)


Posted in Javascript onNovember 04, 2019

过滤器的基本使用

定义一个过滤器

<div id="app">
  <p>{{ msg | msgFormat('疯狂+1', '123') | test }}</p>
 </div>
// 定义一个 Vue 全局的过滤器,名字叫做 msgFormat
  Vue.filter('msgFormat', function (msg, arg, arg2) {
   // 字符串的 replace 方法,第一个参数,除了可写一个 字符串之外,还可以定义一个正则
   return msg.replace(/单纯/g, arg + arg2)
  })

  Vue.filter('test', function (msg) {
   return msg + '========'
  })
  // 创建 Vue 实例,得到 ViewModel
  var vm = new Vue({
   el: '#app',
   data: {
    msg: '曾经,我也是一个单纯的少年,单纯的我,傻傻的问,谁是世界上最单纯的男人'
   },
   methods: {}
  });

过滤器可以使用多个·

下面js代码的HTML部分

<div id="app">
  <!-- {{1+1}} -->
  <div class="panel panel-primary">
   <div class="panel-heading">
    <h3 class="panel-title">添加品牌</h3>
   </div>
   <div class="panel-body form-inline">
    <label>
     Id:
     <input type="text" class="form-control" v-model="id">
    </label>
    <label>
     Name:
     <input type="text" class="form-control" v-model="name" @keyup.f2="add">
    </label>
    <!-- 在Vue中,使用事件绑定机制,为元素指定处理函数的时候,如果加了小括号,就可以给函数传参了 -->
    <input type="button" value="添加" class="btn btn-primary" @click="add()">
    <label>
     搜索名称关键字:
     <!-- 注意: Vue中所有的指令,在调用的时候,都以 v- 开头 -->
     <input type="text" class="form-control" v-model="keywords" id="search" v-focus v-color="'green'">
    </label>
   </div>
  </div>
  <table class="table table-bordered table-hover table-striped">
   <thead>
    <tr>
     <th>Id</th>
     <th>Name</th>
     <th>Ctime</th>
     <th>Operation</th>
    </tr>
   </thead>
   <tbody>
    <!-- 之前, v-for 中的数据,都是直接从 data 上的list中直接渲染过来的 -->
    <!-- 现在, 我们自定义了一个 search 方法,同时,把 所有的关键字,通过传参的形式,传递给了 search 方法 -->
    <!-- 在 search 方法内部,通过 执行 for 循环, 把所有符合 搜索关键字的数据,保存到 一个新数组中,返回 -->
    <tr v-for="item in search(keywords)" :key="item.id">
     <td>{{ item.id }}</td>
     <td v-text="item.name"></td>
     <td>{{ item.ctime | dateFormat() }}</td>
     <td>
      <a href="" @click.prevent="del(item.id)">删除</a>
     </td>
    </tr>
   </tbody>
  </table>
 </div>

定义一个私有过滤器和私有指令

// 如何自定义一个私有的过滤器(局部)
  var vm2 = new Vue({
   el: '#app2',
   data: {
    dt: new Date()
   },
   methods: {},
   filters: { // 定义私有过滤器  过滤器有两个 条件 【过滤器名称 和 处理函数】
    // 过滤器调用的时候,采用的是就近原则,如果私有过滤器和全局过滤器名称一致了,这时候 优先调用私有过滤器
    dateFormat: function (dateStr, pattern = '') {
     // 根据给定的时间字符串,得到特定的时间
     var dt = new Date(dateStr)
     //  yyyy-mm-dd
     var y = dt.getFullYear()
     var m = (dt.getMonth() + 1).toString().padStart(2, '0')
     var d = dt.getDate().toString().padStart(2, '0')
     if (pattern.toLowerCase() === 'yyyy-mm-dd') {
      return `${y}-${m}-${d}`
     } else {
      var hh = dt.getHours().toString().padStart(2, '0')
      var mm = dt.getMinutes().toString().padStart(2, '0')
      var ss = dt.getSeconds().toString().padStart(2, '0')
      return `${y}-${m}-${d} ${hh}:${mm}:${ss} ~~~~~~~`
     }
    }
   },
   directives: { // 自定义私有指令
    'fontweight': { // 设置字体粗细的
     bind: function (el, binding) {
      el.style.fontWeight = binding.value
     }
    },
    'fontsize': function (el, binding) { // 注意:这个 function 等同于 把 代码写到了 bind 和 update 中去
     el.style.fontSize = parseInt(binding.value) + 'px'
    }
   }
  })
  // 过滤器的定义语法
  // Vue.filter('过滤器的名称', function(){})
  // 过滤器中的 function ,第一个参数,已经被规定死了,永远都是 过滤器 管道符前面 传递过来的数据
  /* Vue.filter('过滤器的名称', function (data) {
   return data + '123'
  }) */

全局过滤器

// 全局的过滤器, 进行时间的格式化
  // 所谓的全局过滤器,就是所有的VM实例都共享的
  Vue.filter('dateFormat', function (dateStr, pattern = "") {
   // 根据给定的时间字符串,得到特定的时间
   var dt = new Date(dateStr)
   //  yyyy-mm-dd
   var y = dt.getFullYear()
   var m = dt.getMonth() + 1
   var d = dt.getDate()
   // return y + '-' + m + '-' + d
   if (pattern.toLowerCase() === 'yyyy-mm-dd') {
    return `${y}-${m}-${d}`
   } else {
    var hh = dt.getHours()
    var mm = dt.getMinutes()
    var ss = dt.getSeconds()
    return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
   }
  })
// 自定义全局按键修饰符
  Vue.config.keyCodes.f2 = 113
Vue.directive() 定义全局的指令
 // 其中:参数1 : 指令的名称,注意,在定义的时候,指令的名称前面,不需要加 v- 前缀, 
  // 但是: 在调用的时候,必须 在指令名称前 加上 v- 前缀来进行调用
  // 参数2: 是一个对象,这个对象身上,有一些指令相关的函数,这些函数可以在特定的阶段,执行相关的操作
  Vue.directive('focus', {
   bind: function (el) { // 每当指令绑定到元素上的时候,会立即执行这个 bind 函数,只执行一次
    // 注意: 在每个 函数中,第一个参数,永远是 el ,表示 被绑定了指令的那个元素,这个 el 参数,是一个原生的JS对象
    // 在元素 刚绑定了指令的时候,还没有 插入到 DOM中去,这时候,调用 focus 方法没有作用
    // 因为,一个元素,只有插入DOM之后,才能获取焦点
    // el.focus()
   },
   inserted: function (el) { // inserted 表示元素 插入到DOM中的时候,会执行 inserted 函数【触发1次】
    el.focus()
    // 和JS行为有关的操作,最好在 inserted 中去执行,放置 JS行为不生效
   },
   updated: function (el) { // 当VNode更新的时候,会执行 updated, 可能会触发多次

   }
  })

自定义一个字体颜色的指令

// 自定义一个 设置字体颜色的 指令
  Vue.directive('color', {
   // 样式,只要通过指令绑定给了元素,不管这个元素有没有被插入到页面中去,这个元素肯定有了一个内联的样式
   // 将来元素肯定会显示到页面中,这时候,浏览器的渲染引擎必然会解析样式,应用给这个元素
   bind: function (el, binding) {
    // el.style.color = 'red'
    // console.log(binding.name)
    // 和样式相关的操作,一般都可以在 bind 执行
    // console.log(binding.value)
    // console.log(binding.expression)
    el.style.color = binding.value
   }
  })

总结

以上所述是小编给大家介绍的vue 指令和过滤器的基本使用(品牌管理案例),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
window.onload和$(function(){})的区别介绍
Oct 30 Javascript
Javascript玩转继承(二)
May 08 Javascript
kindeditor修复会替换script内容的问题
Apr 03 Javascript
javascript限制文本框输入值类型的方法
May 07 Javascript
js实现当前输入框高亮显示的方法
Aug 19 Javascript
javascript比较语义化版本号的实现代码
Sep 09 Javascript
ReactJs快速入门教程(精华版)
Nov 28 Javascript
基于JavaScript实现百度搜索框效果
Jun 28 Javascript
使用微信小程序开发弹出框应用实例详解
Oct 18 Javascript
关于微信小程序map组件z-index的层级问题分析
Jul 09 Javascript
处理canvas绘制图片模糊问题
May 11 Javascript
js前端面试常见浏览器缓存强缓存及协商缓存实例
Jun 21 Javascript
vue中使用GraphQL的实例代码
Nov 04 #Javascript
Vue项目中Api的组织和返回数据处理的操作
Nov 04 #Javascript
JS+CSS实现随机点名(实例代码)
Nov 04 #Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
Nov 04 #Javascript
详解利用eventemitter2实现Vue组件通信
Nov 04 #Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
Nov 04 #jQuery
JS立即执行的匿名函数用法分析
Nov 04 #Javascript
You might like
destoon二次开发模板及调用语法汇总
2014/06/21 PHP
php实现格式化多行文本为Js可用格式
2015/04/15 PHP
php查找字符串中第一个非0的位置截取
2017/02/27 PHP
php微信公众号开发之现金红包
2018/04/16 PHP
HR vs CL BO3 第一场 2.13
2021/03/10 DOTA
JavaScript动态调整TextArea高度的代码
2010/12/28 Javascript
document.createElement()用法
2013/03/13 Javascript
JS小功能(button选择颜色)简单实例
2013/11/29 Javascript
javascript实现超炫的向上滑行菜单实例
2015/08/03 Javascript
Angular Js文件上传之form-data
2015/08/28 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
2016/03/01 Javascript
Bootstrap模仿起筷首页效果
2016/05/09 Javascript
js实现非常棒的弹出div
2016/10/06 Javascript
JavaScript获取键盘按键的键码(参照表)
2017/01/10 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
一步步教你利用Docker设置Node.js
2018/11/20 Javascript
Node.js + express基本用法教程
2019/03/14 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
2019/05/13 Javascript
转换layUI的数据表格中的日期格式方法
2019/09/19 Javascript
vue移动端弹起蒙层滑动禁止底部滑动操作
2020/07/22 Javascript
Python translator使用实例
2008/09/06 Python
利用Python爬取可用的代理IP
2016/08/18 Python
python 第三方库的安装及pip的使用详解
2017/05/11 Python
用python做一个搜索引擎(Pylucene)的实例代码
2017/07/05 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
2020/03/03 Python
基于CSS3的animation属性实现微信拍一拍动画效果
2020/06/22 HTML / CSS
HTML5 WebSocket实现点对点聊天的示例代码
2018/01/31 HTML / CSS
小学老师寄语大全
2014/04/04 职场文书
网站客服岗位职责
2014/04/05 职场文书
社区活动策划方案
2014/08/21 职场文书
三年级学生期末评语
2014/12/26 职场文书
公司捐书倡议书
2015/04/27 职场文书
检讨书之工作不认真
2019/08/14 职场文书
Pytorch实现图像识别之数字识别(附详细注释)
2021/05/11 Python
springboot 全局异常处理和统一响应对象的处理方式
2022/06/28 Java/Android