Vue第五天---Vue过滤器

126 阅读2分钟

Vue过滤器

1.过滤器的基本使用

Vue允许自定义过滤器,可被用于一些常见的文本格式化。

过滤器可以用在两个地方:双大括号表达式v-bind表达式

过滤器应该被添加在js表达式尾部,由|指示

例如

 {{message|myVue}}
 ​
 <div v-bind:id="rawId|format"></div>

过滤器分为两种:全局过滤器局部过滤器

2.全局过滤器

如果各种地方都要使用一个过滤器,那就定义全局过滤器(也就是过滤器定义在Vue实例之前)

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>全局过滤器 demo</title>
     <script src="../../easy_start/js/vue.js" type="text/javascript" charset="UTF-8"></script>
 </head>
 <body>
 <div id="app">
 ​
 </div>
 ​
 ​
 <script type="text/javascript">
     let App={
         template: '<div><input type="text" v-model="text">{{text|myvue("Hi","Shelgi")}}</div>',
         data(){
             return {
                 text:''
             }
         }
     }
 ​
     Vue.filter('myvue',function (val1,val2,val3){
         return val2+val3+': '+val1.split('').reverse().join('');
     })
 ​
     new Vue({
         el:'#app',
         components:{'app':App},
         template:'<app />'
     })
 </script>
 </body>
 </html>

image-20211107174556178

3.局部过滤器

局部过滤器与全局过滤器使用方法上一样,唯一的区别就是局部过滤器是定义在Vue实例中的,作用域也就是Vue实例的作用域

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>局部过滤器 demo</title>
     <script src="../../easy_start/js/vue.js" type="text/javascript" charset="UTF-8"></script>
 </head>
 <body>
 <div id="app">
 </div>
 ​
 <script type="text/javascript">
     let App= {
         template: '<div><input type="text" v-model="text">{{text|myvue}}</div>',
         data() {
             return {
                 text: '',
             };
         },
         filters: {
             myvue: function (val) {
                 return 'Hi Shelgi';
             }
         }
     }
 ​
     new Vue({
         el:"#app",
         components:{'app':App},
         template:'<app />'
     })
 ​
 </script>
 </body>
 </html>

image-20211107181045663

虽然我使用了v-model进行双向绑定,但是input输入的内容不会对右边产生影响,这说明过滤器中显示的是myvue函数的返回值。

4.JSON

JSON是一种轻量级的数据交换格式,JSON是js对象的字符串表示法,使用文本表示一个js对象的信息,本质还是一个字符串

  • 可以通过HTTP请求获取:this.$http.get('xxx.json')

  • require运行时加载:require(xxx.json)

  • import编译时输出接口:import xxx from 'xxx.json'

    5.currency

    主要作用就是实现货币的过滤方式

    6. 双向过滤器

    普通过滤器用在一般元素上,数据由Model到View,只可以读;双向过滤器用在表单元素上,数据双向流动,可读可写

    不幸的

    上面写了很多关于过滤器的内容,但是在Vue3.x中,过滤器已经被移除,官方觉得过滤器需要自定义语法,打破了{{}}中只是js的假设,为了降低学习实现成本,就在新版本中将它移除了。取而代之的是建议使用方法调用计算属性来代替

     <!DOCTYPE html>
     <html lang="en">
     <head>
         <meta charset="UTF-8">
         <title>Vue3.x 过滤器demo</title>
         <script src="../../easy_start/js/vue.js" type="text/javascript" charset="UTF-8"></script>
     </head>
     <body>
     <div id="app">
         <p>{{demo}}</p>
     </div>
     ​
     ​
     <script type="text/javascript">
         var vm=new Vue({
             el:'#app',
             data:{
                 data:'aaa'
             },
             computed:{
                 demo(){
                     return '过滤器'+this.data
                 }
             }
         })
     </script>
     </body>
     </html>
    

    image-20211107192548982

    当我们需要注册全局过滤器的时候,就必须使用全局属性才能让它被所有组件使用,并且这个方法只适用于方法,计算属性必须依赖Vue实例所以不能作为全局属性注册。