vue学习笔记(一) ---- vue指令(过滤器)

一、什么是过滤器

官方文档:https://cn.vuejs.org/v2/guide/filters.html

二、过滤器的使用

没有使用过滤器之前:

<div id="app">
    <table>
        <thead>
        <tr>
            <th>排名</th>
            <th>菜名</th>
        </tr>
        </thead>
        <tbody>
        <tr v-for="item in list" :key="item.id">
            <td>{{ item.id }}</td>
            <td>{{ item.name}}</td>
        </tr>
        </tbody>
    </table>
</div>
<script>
    var vm = new Vue({
        el: '#app',
        data: {
            list: [
                { id: 1, name: '黄焖鸡' },
                { id: 2, name: '烤鱼'},
                { id: 3, name: '鸭血粉丝'},
                { id: 4, name: '大碗米线' },
                { id: 5, name: '螺蛳粉' },
                { id: 6, name: '鱼香肉丝'},
            ]
        }
    })
</script>

来吧展示:
在这里插入图片描述

使用过滤器之后:

  1. 使用双括号的方式去添加过滤器
 <tr v-for="item in list" :key="item.id">
            <td>{{ item.id }}</td>
            <td>{{ item.name | filterData }}</td>
 </tr>
Vue.filter('filterData',function () {
        console.log('过滤器被调用了。。。')
        return '螺蛳粉  my love~~'
    })
    //在vm实例对象之前去定义过滤器
var vm = new Vue({
    .........
})

来吧展示:

在这里插入图片描述

注意:过滤器的处理函数中的第一个参数已经规定死了,就是管道符前面的数,这里也就是item.name

如下:

Vue.filter('filterData',function (data) {
        console.log('过滤器被调用了。。。')
        return  data+ '~~~~~'
    })

在这里插入图片描述

三、给过滤器传递参数

 <td>{{ item.name | filterData('xxxxxxx')}}</td>
  Vue.filter('filterData',function (data,str) {
        return  data + str
 })

来吧展示:

在这里插入图片描述

四、使用多个过滤器

<td>{{ item.name | filterData | addstr}}</td>
 Vue.filter('filterData',function (data) {
        return  data+ '~~~~~'
    })
Vue.filter('addstr',function (data) {
         return  data + '哈哈哈哈哈'
   })

来吧展示:
在这里插入图片描述

五、全局过滤器的栗子

<div id="app">
    <p>{{msg}}</p>
</div>
var vm = new Vue({
   el: '#app',
   data: {
   msg: '鸭血粉丝里面放有:鸭血,鸭肠,鸭肝'
        },
   methods: {}
    });

在这里插入图片描述
使用全局过滤器,将"鸭"改成"猪"
方式一:

 <p>{{msg | filtermsg}}</p>
 Vue.filter('filtermsg',function (data) {
        // return data.replace('a','x')
        // replace只能替换掉第一项
        // 第一个参数传入正则,可以全局匹配
        return data.replace(/鸭/g,'猪')
})

在这里插入图片描述
2. 方式二:
在过滤器中传递参数

 <p>{{msg | filtermsg('猪')}}</p>
Vue.filter('filtermsg',function (data,str) {
   return data.replace(/鸭/g,str)
})
  1. 方式三:
    直接在参数后面传入数据
<p>{{msg | filtermsg}}</p>
Vue.filter('filtermsg',function (data,str='猪') {
        return data.replace(/鸭/g,str)
})

如果定义了另外一个vm2实例
那么也可以使用全局过滤器

<body>

<div id="app">
    <p>{{msg | filtermsg}}</p>
</div>
<hr>


<div id="app2">
    <p>{{msg | filtermsg }}</p>
</div>

<script>
    Vue.filter('filtermsg',function (data,str='猪') {
        return data.replace(/鸭/g,str)
    })

    var vm = new Vue({
        el: '#app',
        data: {
            msg: '鸭血粉丝里面放有:鸭血,鸭肠,鸭肝'
        },
        methods: {}
    });
    var vm2 = new Vue({
        el:'#app2',
        data: {
            msg: '哇哦~是鸭血粉丝'
        },
        methods: {}
    });
</script>
</body>

在这里插入图片描述

六、私有过滤器

<div id="app2">
    <p>{{msg | filtermsg | addStr}}</p>
</div>
var vm2 = new Vue({
        el:'#app2',
        data: {
            msg: '哇哦~是鸭血粉丝'
        },
        methods: {},
         filters:{
            // addStr:function (data) {
             addStr(data){
                return data + '~~~~~~wao好好恰'
             }
        }

    });

在这里插入图片描述

注意:
私有过滤器只能vm2实例的容器才可以使用,vm实例的区域不能使用

如果全局过滤器与私有过滤器重名的话,会以就近原则,执行私有的过滤器

<div id="app2">
    <p>{{msg | filtermsg | addStr}}</p>
</div>
Vue.filter('filtermsg',function (data,str='猪') {
        return data.replace(/鸭/g,str)
})
var vm2 = new Vue({
        el:'#app2',
        data: {
            msg: '哇哦~是鸭血粉丝'
        },
        methods: {},
         filters:{
             // addStr:function (data) {
             addStr(data){
                return data + '~~~~~~wao好好恰'
             },
             filtermsg:function (data) {
                 // return data.replace(/鸭/g,str)
                 return data + '111111'
             }
        }
});

在这里插入图片描述

posted @ 2020-10-24 19:36  杨芋可可  阅读(149)  评论(0编辑  收藏  举报