美文网首页Vue.js
vue之filter(过滤器)

vue之filter(过滤器)

作者: 刘淘 | 来源:发表于2020-04-10 15:04 被阅读0次

    Vue.js中可以自定义过滤器,用于常见的文本格式化(比如:格式化时间、首字母大写,动态绑定el-tag的样式)
    过滤器应该被添加在JavaScript表达式的尾部,由“管道”符号指示。

    过滤器可以串联:

    {{ message | filterA | filterB }}
    

    在这个例子中,filterA 被定义为接收单个参数的过滤器函数,【表达式 message 的值将作为参数传入到函数中】。然后继续调用同样被定义为接收单个参数的过滤器函数 filterB,将 filterA 的结果传递到 filterB 中。

    过滤器是 JavaScript 函数,因此可以接收参数:

    {{ message | filterA('arg1', arg2) }}
    

    这里,filterA 被定义为接收三个参数的过滤器函数。其中 message 的值作为第一个参数,普通字符串 'arg1' 作为第二个参数,表达式 arg2 的值作为第三个参数。

    过滤器的定义位置:
    1.在一个组件的选项中定义本地的过滤器
    ## demoxx.vue文件中
    export default {
      name: 'demo',
      filters: { 
        statusFilter(status) {
          const statusMap = {
            published: 'success',
            draft: 'info',
            deleted: 'danger'
          }
          return statusMap[status]
        }
      },
      data() {
       ## ........省略代码......
    
    2.在创建Vue实例之前全局定义过滤器
    ##main.js文件中
    Vue.filter('capitalize', function (value) {
      if (!value) return ''
      value = value.toString()
      return value.charAt(0).toUpperCase() + value.slice(1)
    })
    
    new Vue({
      // ...
    })
    
    当全局过滤器和局部过滤器重名时,会采用局部过滤器。
    过滤器的使用地方:双花括号插值和v-bind表达式
    1. 双花括号插值
    <el-table-column class-name="status-col" label="Status" width="110">
            <template slot-scope="{row}">
              <el-tag :type="row.status">
                {{ row.status | capitalize }}
              </el-tag>
            </template>
          </el-table-column>
    
    2. 用在v-bind表达式 ( 在一个组件的选项中定义本地的过滤器)
    <el-table-column class-name="status-col" label="Status" width="110">
            <template slot-scope="{row}">
              <el-tag :type="row.status | statusFilter">
                {{ row.status }}
              </el-tag>
            </template>
    </el-table-column>
       ## ........省略代码......
    export default {
      name: 'demo',
      filters: { 
        statusFilter(status) {
          const statusMap = {
            published: 'success',
            draft: 'info',
            deleted: 'danger'
          }
          return statusMap[status]
        }
      },
      data() {
       ## ........省略代码......
    
    效果图
    效果图,不同的状态显示不同的tag样式.png

    ================== ===========================================
    此处想到了工具类,将公用方法放在一个util.js中,然后在main.js中引入。
    util中的方法也同样可以在 双花括号插值和v-bind表达式中使用。

    vue--admin框架中util文件的index.js貌似不需要在main.js中引用可以直接使用。

    相关文章

      网友评论

        本文标题:vue之filter(过滤器)

        本文链接:https://www.haomeiwen.com/subject/qokrmhtx.html