KnightSama‘s Blog

vuePress-theme-reco KnightSama    2021
KnightSama‘s Blog KnightSama‘s Blog

Choose mode

  • dark
  • auto
  • light
首页
分类
  • iOS
  • 集锦
  • JavaScript
  • Github
  • Python
标签
时间线
GitHub
author-avatar

KnightSama

27

文章

14

标签

首页
分类
  • iOS
  • 集锦
  • JavaScript
  • Github
  • Python
标签
时间线
GitHub
  • Vue 学习笔记—过滤器

    • 全局过滤器
      • 私有过滤器

      Vue 学习笔记—过滤器

      vuePress-theme-reco KnightSama    2021

      Vue 学习笔记—过滤器


      KnightSama 2020-05-14 Vue

      Vue 可以定义过滤器来进行文本格式化,过滤器可以用在插值表达式 {{}} 和 v-bind 中。过滤器需要添加在表达式的尾部用管道符 | 来连接 将需要过滤的文本作为参数传入过滤器中,最后显示的是过滤器处理过后的结果

      <div>{{ message | filter}}</div>
      
      <div v-bind:id="message | filter"></div>
      
      1
      2
      3

      多个过滤器可以连接在一起,前一个过滤器的结果作为后一个过滤器的参数传入,最终显示最后的处理结果

      <div>{{ message | filter1 | filter2}}</div>
      
      1

      # 全局过滤器

      可以使用 Vue.filter() 定义全局过滤器,这样每个 Vue 实例都可以拿到这个过滤器, filter 中有两个参数,第一个是过滤器的名称,也就是管道符后的名称,第二个参数是过滤器函数。过滤器函数的第一个参数是管道符前面传入的要处理的文本,之后可以根据需要添加额外的参数,同时需要返回处理的结果用来显示或传入下个过滤器。

      Vue.filter('filterName', function (value) {
        return result
      })
      
      1
      2
      3

      下面通过过滤器将输入的字母全部转换为大写

      <html>
      
      <div id="vue-example-1">
          <input type="text" v-model="message">
          <p>过滤结果:{{message | uppercase}}</p>
      </div>
      
      <script>
          Vue.filter('uppercase', function (message) {
            return message.toUpperCase()
          });
          
          new Vue({
              el: '#vue-example-1',
              data: {
                  message: "",
              }
          });
      </script>
      
      </html>
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21

      过滤器还可以添加多个参数,下面的例子通过添加参数将输入文本中所有的 love 替换为 ❤️

      <html>
      
      <div id="vue-example-2">
          <input type="text" v-model="message">
          <p>过滤结果:{{message | replace('love', '❤️')}}</p>
      </div>
      
      <script>
          Vue.filter('replace', function (message, arg1, arg2) {
            // 使用正则表达式全局替换 arg1
            return message.replace(RegExp(arg1,"g"), arg2)
          });
          
          new Vue({
              el: '#vue-example-2',
              data: {
                  message: "",
              }
          });
      </script>
      
      </html>
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22

      # 私有过滤器

      在 Vue 对象内部定义的过滤器是私有过滤器,这种过滤器只在该 Vue 实例指定的区域内有效

      下面的例子将上面转换大写字母的例子改为私有过滤器

      <html>
      
      <div id="vue-example-3">
          <input type="text" v-model="message">
          <p>过滤结果:{{message | uppercase}}</p>
      </div>
      
      <script>
          new Vue({
              el: '#vue-example-3',
              data: {
                  message: "",
              },
              // 定义私有过滤器
              filters: {
                  uppercase: function(message) {
                      return message.toUpperCase()
                  },
              }
          });
      </script>
      
      </html>
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23

      就近原则

      过滤器调用的时候采用就近原则,如果私有过滤器和全局过滤器名称一致优先调用私有过滤器。

      欢迎来到 KnightSama‘s Blog
      看板娘