您现在的位置是:首页 > 技术教程 正文

Vue3 之 过滤器

admin 阅读: 2024-04-01
后台-插件-广告管理-内容页头部广告(手机)

1、过滤器简介

1.1、全局过滤器与局部过滤器

过滤器本质上是一个函数,与自定义指令类似。

        全局过滤器

Vue.filter(id, [definition])

     局部过滤器

  1. new Vue({
  2. el: '#app',
  3. filters: {
  4. definition(value): {
  5. ...
  6. }
  7. }
  8. })

案例:将字符串首字母转换为大写字母的全局过滤器

  1. Vue.filter('capitalize', function (value) {
  2. if (!value) return '';
  3. value = value.toString();
  4. return value.charAt(0).toUpperCase() + value.slice(1);
  5. })

 如果换成局部过滤器

  1. let vm = new Vue({
  2. el: '#app',
  3. data: { // 参数定义,字典形式
  4. },
  5. computed: { // 计算属性,多次调用,只计算一次
  6. },
  7. methods: { // 普通方法,多次调用,多次计算
  8. },
  9. filters: { // 过滤器
  10. capitalize(value) {
  11. if (!value) return '';
  12. value = value.toString();
  13. return value.charAt(0).toUpperCase() + value.slice(1);
  14. }
  15. }
  16. })

 

注意:

  1. 当全局过滤器和局部过滤器重名,会采用局部过滤器
  2. 与自定义命令一样,全局过滤器可以在任何 Vue 实例的模板中使用,而局部过滤器只能在该实例绑定的视图中使用

 

过滤器可以使用在两个地方:

    双花括号:{{ 变量 | 过滤器 }}
    v-bind 表达式:v-bind:href=“变量 | 过滤器”

2、过滤器的参数

过滤器函数总是接收表达式的值作为第一个参数,过滤器本质上是一个 JS 函数,自然可以接收多个参数。

    不建议把过滤器功能做的很复杂,这违背了过滤器的设计初衷,比如:Vue.filter(‘format’, function (value, …params) {…})

实例:为表达式的值添加前后缀的过滤器
 

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <div id="app">
  9. <h2>过滤器</h2>
  10. <!-- 输出:vue-filters.js -->
  11. <p>{{ filename | format('vue', suffix) }}</p>
  12. </div>
  13. <script src="VueJs/vue.js"></script>
  14. <script>
  15. Vue.filter('format', function (value, prefix, suffix) {
  16. if (!value) return '';
  17. value = value.toString();
  18. return prefix + "-" + value + "." + suffix;
  19. })
  20. let vm = new Vue({
  21. el: '#app',
  22. data: {
  23. filename: 'filters',
  24. suffix: 'js'
  25. },
  26. computed: { // 计算属性,多次调用,只计算一次
  27. },
  28. methods: { // 普通方法,多次调用,多次计算
  29. },
  30. filters: { // 过滤器
  31. }
  32. })
  33. </script>
  34. </body>
  35. </html>

 3、过滤器的串联

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <style>
  7. .profile {}
  8. </style>
  9. </head>
  10. <body>
  11. <div id="app">
  12. <h2>过滤器</h2>
  13. <!-- 输出结果:DLROW OLLEH -->
  14. <p>{{ message | uppercase | reverse }}</p>
  15. </div>
  16. <script src="VueJs/vue.js"></script>
  17. <script>
  18. Vue.filter('uppercase', function (value) {
  19. if (!value) return '';
  20. value = value.toString();
  21. return value.toUpperCase();
  22. })
  23. Vue.filter('reverse', function (value) {
  24. if (!value) return '';
  25. value = value.toString();
  26. return value.split('').reverse().join('');
  27. })
  28. let vm = new Vue({
  29. el: '#app',
  30. data: {
  31. message: 'hello world'
  32. },
  33. computed: { // 计算属性,多次调用,只计算一次
  34. },
  35. methods: { // 普通方法,多次调用,多次计算
  36. },
  37. filters: { // 局部过滤器
  38. }
  39. })
  40. </script>
  41. </body>
  42. </html>

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索