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 相关文章推荐
JS 文字符串转换unicode编码函数
May 30 Javascript
几个比较实用的JavaScript 测试及效验工具
Apr 18 Javascript
JavaScript 类型的包装对象(Typed Wrappers)
Oct 27 Javascript
js利用prototype调用Array的slice方法示例
Jun 09 Javascript
jquery实现类似淘宝星星评分功能实例
Sep 12 Javascript
JS简单实现城市二级联动选择插件的方法
Aug 19 Javascript
js将滚动条滚动到指定位置的简单实现方法
Jun 25 Javascript
微信小程序简单实现form表单获取输入数据功能示例
Nov 30 Javascript
详解Vue webapp项目通过HBulider打包原生APP(vue+webpack+HBulider)
Feb 02 Javascript
关于vue里页面的缓存详解
Nov 04 Javascript
在vue中使用inheritAttrs实现组件的扩展性介绍
Dec 07 Vue.js
threejs太阳光与阴影效果实例代码
Apr 05 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
搜索和替换文件或目录的一个好类--很实用
2006/10/09 PHP
PHP syntax error, unexpected $end 错误的一种原因及解决
2008/10/25 PHP
php str_pad() 将字符串填充成指定长度的字符串
2010/02/23 PHP
THINKPHP+JS实现缩放图片式截图的实现
2010/03/07 PHP
php函数连续调用实例分析
2015/07/30 PHP
使用vs code编辑调试php配置的方法
2019/01/29 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
2019/03/12 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
jQuery EasyUI 中文API Button使用实例
2010/04/14 Javascript
cnblogs中在闪存中屏蔽某人的实现代码
2010/11/14 Javascript
javascript控制Div层透明属性由浅变深由深变浅逐渐显示
2013/11/12 Javascript
javascripit实现密码强度检测代码分享
2013/12/12 Javascript
jQuery获得内容和属性示例代码
2014/01/16 Javascript
IE中JS跳转丢失referrer问题的2个解决方法
2014/07/18 Javascript
javascript设置文本框光标的方法实例小结
2016/11/04 Javascript
jQuery ajax的功能实现方法详解
2017/01/06 Javascript
jquery仿ps颜色拾取功能
2017/03/08 Javascript
vue.js开发环境安装教程
2017/03/17 Javascript
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
微信小程序canvas分享海报功能
2019/10/31 Javascript
python游戏开发之视频转彩色字符动画
2019/04/26 Python
python找出一个列表中相同元素的多个索引实例
2019/06/11 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
2019/06/27 Python
浅谈python多进程共享变量Value的使用tips
2019/07/16 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
通过Canvas及File API缩放并上传图片完整示例
2013/08/08 HTML / CSS
预订奥兰多和佛罗里达州公园门票:FloridaTix
2018/01/03 全球购物
TUMI新加坡官网:国际领先的商旅箱包品牌
2019/01/12 全球购物
ORLY官网:美国专业美甲一线品牌
2019/12/11 全球购物
统计每一学生的平均成绩
2014/06/06 面试题
运动会广播稿300字
2014/01/10 职场文书
公司开业庆典主持词
2014/03/21 职场文书
教师党员公开承诺书
2014/03/25 职场文书
2014小学二年级班主任工作总结
2014/12/05 职场文书
反腐倡廉影片观后感
2015/06/08 职场文书
2015最新婚礼主持词
2015/06/30 职场文书