zoukankan      html  css  js  c++  java
  • vue项目中自定义filter过滤器以及自定义事件绑定

    关于vue的过滤器的解释和使用可参看 vue.js官方文档

    关于vue的自定义事件可参看 vue.js官方文档

    此处只是本人在开发过程中的一些记录,方便查阅,希望能给各位带来一些帮助!

    首先在filters文件夹下创建index.js文件:

    const dateFormat = (value, format) => {
      const date = new Date(value)
      const y = date.getFullYear()
      const m = date.getMonth() + 1
      const d = date.getDate()
      const h = date.getHours()
      const min = date.getMinutes()
      const s = date.getSeconds()
    
      if (format === undefined) {
        return `${y}-${m < 10 ? '0' + m : m}-${d < 10 ? '0' + d : d} ${h < 10 ? '0' + h : h}:${min < 10 ? '0' + min : min}:${s < 10 ? '0' + s : s}`
      }
      if (format === 'yyyy-mm-dd hh:mm') {
        return `${y}-${m < 10 ? '0' + m : m}-${d < 10 ? '0' + d : d} ${h < 10 ? '0' + h : h}:${min < 10 ? '0' + min : min}`
      }
      if (format === 'yyyy-mm-dd') {
        return `${y}-${m < 10 ? '0' + m : m}-${d < 10 ? '0' + d : d}`
      }
      if (format === 'yyyy-mm') {
        return `${y}-${m < 10 ? '0' + m : m}`
      }
      if (format === 'mm-dd') {
        return ` ${m < 10 ? '0' + m : m}:${d < 10 ? '0' + d : d}`
      }
      if (format === 'yyyy') {
        return `${y}`
      }
      if (format === 'hh:mm:ss') {
        return ` ${h < 10 ? '0' + h : h}:${min < 10 ? '0' + min : min}:${s < 10 ? '0' + s : s}`
      }
      if (format === 'hh:mm') {
        return ` ${h < 10 ? '0' + h : h}:${min < 10 ? '0' + min : min}`
      } else {
        return ''
      }
    }
    
    const dateStrFormat = (value, format) => {
      if (value === undefined) {
        return ''
      }
      if (format === undefined) {
        return value
      }
      if (format === 'yyyy-mm-dd hh:mm') {
        return value.substr(0, 16)
      }
      if (format === 'yyyy-mm-dd') {
        return value.substr(0, 10)
      }
      if (format === 'yyyy-mm') {
        return value.substr(0, 7)
      }
      if (format === 'mm-dd') {
        return value.substr(5, 5)
      }
      if (format === 'yyyy') {
        return value.substr(0, 4)
      }
      if (format === 'hh:mm:ss') {
        return value.substr(11, 8)
      }
      if (format === 'hh:mm') {
        return value.substr(11, 5)
      } else {
        return ''
      }
    }
    
    const subString = (value, len) => {
      if (value != '') {
        if (len === undefined) {
          return value.substr(0, 20)
        } else if (value.length > len) {
          return value.substr(0, len)
        } else {
          return value
        }
      } else {
        return ''
      }
    }
    
    // 截取当前数据到小数点后两位
    const toFixed = (value, len) => {
      if (len !== undefined && (/(^[1-9]d*$)/.test(len) || len === 0)) {
        return parseFloat(value).toFixed(len)
      } else {
        return parseFloat(value).toFixed(2)
      }
    }
    
    /**
     * 将秒转换为 分:秒
     * s int 秒数
    */
    const sToHs = (s) => {
      // 计算分钟
      // 算法:将秒数除以60,然后下舍入,既得到分钟数
      var h
      h = Math.floor(s / 60)
      // 计算秒
      // 算法:取得秒%60的余数,既得到秒数
      s = s % 60
      // 将变量转换为字符串
      h += ''
      s += ''
      // 如果只有一位数,前面增加一个0
      h = (h.length === 1) ? '0' + h : h
      s = (s.length === 1) ? '0' + s : s
      return h + '分' + s + '秒'
    }
    
    export default {
      dateStrFormat,
      dateFormat,
      subString,
      toFixed,
      sToHs
    }
    View Code

    在全局js文件中引入过滤器以及自定义事件:

    import Vue from 'vue'
    import ElementUI from 'element-ui'
    import filters from './filters'
    // set ElementUI lang to EN
    // Vue.use(ElementUI, { locale })
    // 如果想要中文版 element-ui,按如下方式声明
    Vue.use(ElementUI)
    import App from './App'
    import store from './store'
    import router from './router'
    
    // 引入定义的全局filter
    Object.keys(filters).forEach(k => Vue.filter(k, filters[k]))
    
    // 自定义的点击事件  点击元素外部时触发的事件
    Vue.directive('clickoutside', {
      // 初始化指令
      bind(el, binding, vnode) {
        function documentHandler(e) {
          // 这里判断点击的元素是否是本身,是本身,则返回
          if (el.contains(e.target)) {
            return false
          }
          // 判断指令中是否绑定了函数
          if (binding.expression) {
            // 如果绑定了函数 则调用那个函数,此处binding.value就是handleClose方法
            binding.value(e)
          }
        }
        // 给当前元素绑定个私有变量,方便在unbind中可以解除事件监听
        el.__vueClickOutside__ = documentHandler
        document.addEventListener('click', documentHandler)
      },
      update() {},
      unbind(el, binding) {
        // 解除事件监听
        document.removeEventListener('click', el.__vueClickOutside__)
        delete el.__vueClickOutside__
      }
    })
    
    // 添加日期获取工具
    Vue.prototype.getNowFormatDate = function getFormatDate() {
      var date = new Date()
      var month = date.getMonth() + 1
      var strDate = date.getDate()
      if (month >= 1 && month <= 9) {
        month = '0' + month
      }
      if (strDate >= 0 && strDate <= 9) {
        strDate = '0' + strDate
      }
      var currentDate = date.getFullYear() + '-' + month + '-' + strDate + ' ' + date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds()
      return currentDate
    }
    
    // 添加日期获取工具
    Vue.prototype.getNowFormatDate = function getFormatDate() {
      var date = new Date()
      var month = date.getMonth() + 1
      var strDate = date.getDate()
      if (month >= 1 && month <= 9) {
        month = '0' + month
      }
      if (strDate >= 0 && strDate <= 9) {
        strDate = '0' + strDate
      }
      var currentDate = date.getFullYear() + '-' + month + '-' + strDate + ' ' + date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds()
      return currentDate
    }
    
    new Vue({
      el: '#app',
      router,
      store,
      render: h => h(App)
    })
    View Code

    应用主体 App.vue:

    <template>
      <div id="app">
        <router-view />
      </div>
    </template>
    
    <script>
    export default {
      name: 'App'
    }
    </script>
    View Code

    vue的filter使用用途之一: 

    <span>{{ title|subString(20) }}</span>
     
    过滤器函数总接收表达式的值 (之前的操作链的结果) 作为第一个参数。在上述例子中,subString 过滤器函数将会收到 title 的值作为第一个参数。
     
    vue自定义事件的使用:
    <div v-clickoutside="hideCMSearch" class="search-box-inner" />
     
    clickoutside为自定义的事件名称,hideCMSearch为事件触发的函数
     

    每天进步一点点,点滴记录,积少成多。

    以此做个记录,

    如有不足之处还望多多留言指教!

  • 相关阅读:
    Java的静态块与实例块(转)
    Programming Ability Test学习 1031. Hello World for U (20)
    Programming Ability Test学习 1011. World Cup Betting (20)
    Programming Ability Test学习 1027. Colors in Mars (20)
    Programming Ability Test学习 1064. Complete Binary Search Tree (30)
    Programming Ability Test学习 1008. Elevator (20)
    【maven详解-生命周期】Maven的生命周期和插件
    【maven详解-插件】maven插件学习之源码插件Source Xref
    $(document).ready(){}、$(fucntion(){})、(function(){})(jQuery)onload()的区别
    你还没真的努力过,就轻易输给了懒惰
  • 原文地址:https://www.cnblogs.com/jindao3691/p/14973651.html
Copyright © 2011-2022 走看看