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 相关文章推荐
用JQuery在网页中实现分隔条功能的代码
Aug 09 Javascript
node.js中的fs.lstat方法使用说明
Dec 16 Javascript
使用FlexiGrid实现Extjs表格效果方法分享
Dec 16 Javascript
js实现简单的左右两边固定广告效果实例
Apr 10 Javascript
详解Bootstrap按钮
Jan 04 Javascript
实例详解jQuery结合GridView控件的使用方法
Jan 04 Javascript
基于React.js实现原生js拖拽效果引发的思考
Mar 30 Javascript
论Bootstrap3和Foundation5网格系统的异同
May 16 Javascript
js简单正则验证汉字英文及下划线的方法
Nov 28 Javascript
Require.js的基本用法详解
Jul 03 Javascript
使用nvm管理不同版本的node与npm的方法
Oct 31 Javascript
Vue.js 中的 v-cloak 指令及使用详解
Nov 19 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
PHP开发入门教程之面向对象
2006/12/05 PHP
PHP自动识别字符集并完成转码详解
2013/08/02 PHP
php中count获取多维数组长度的方法
2014/11/03 PHP
微信支付PHP SDK ―― 公众号支付代码详解
2016/09/13 PHP
js可突破windows弹退效果代码
2008/08/09 Javascript
JQuery 入门实例1
2009/06/25 Javascript
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
css配合jquery美化 select
2013/11/29 Javascript
jQuery中[attribute=value]选择器用法实例
2014/12/31 Javascript
Js为表单动态添加节点内容的方法
2015/02/10 Javascript
js控制多图左右滚动切换效果代码分享
2015/08/26 Javascript
浅谈JS中String()与 .toString()的区别
2016/10/20 Javascript
微信小程序 实战程序简易新闻的制作
2017/01/09 Javascript
JS实现的简单拖拽购物车功能示例【附源码下载】
2018/01/03 Javascript
微信小程序开发之tabbar图标和颜色的实现
2018/10/17 Javascript
Vue中keep-alive组件作用详解
2020/02/04 Javascript
简单了解JavaScript作用域
2020/07/31 Javascript
Element el-button 按钮组件的使用详解
2021/02/01 Javascript
[02:40]DOTA2英雄基础教程 先知
2013/11/29 DOTA
举例讲解Python中的死锁、可重入锁和互斥锁
2015/11/05 Python
Python出现segfault错误解决方法
2016/04/16 Python
微信跳一跳自动运行python脚本
2018/01/08 Python
基于Python实现定时自动给微信好友发送天气预报
2018/10/25 Python
pycharm设置鼠标悬停查看方法设置
2019/07/29 Python
python中append实例用法总结
2019/07/30 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
2020/03/02 Python
python中可以声明变量类型吗
2020/06/18 Python
Shopping happy life西班牙:以最优惠的价格提供最好的时尚配饰
2020/03/13 全球购物
The North Face意大利官网:服装、背包和鞋子
2020/06/17 全球购物
个人自我鉴定写法
2013/11/30 职场文书
经典婚礼主持词
2014/03/13 职场文书
农业生产宣传标语
2014/10/08 职场文书
汽车销售助理岗位职责
2015/04/14 职场文书
人事任命书范本
2015/09/21 职场文书
Python机器学习之KNN近邻算法
2021/05/14 Python
python数字类型和占位符详情
2022/03/13 Python