Vue过滤器

269 阅读1分钟


# 过滤器
Vue.js 允许自定义过滤器,用于文本的格式化。其特点是,渲染格式化后的文本却不改变其本身内容。例如:日期的格式化 过滤器可以用在两个地方:双花括号插值、 v-bind 表达式 (v2.1.0+)。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号指示:

<!-- 在双花括号中 -->
{{ message | capitalize }}

<!-- 在 `v-bind` 中 -->
<div v-bind:id="rawId | formatId"></div>



# 全局过滤器
顾名思义,定以后可以在每一个vue实例中使用,要注意的是,必须在vue实例声明前定义过滤器,否则会出现检测不到过滤器的情况。 下面是一个用例,定义的funfotmat过滤器将可以在app和app2中使用

<div id="app">
	<p v-for="item in list">{{item.name | funfotmat}}</p>
</div>
<script>
	Vue.filter('funfotmat',function(name){
		return name.replace(/xiao/g,"da")
	})
    var vm = new Vue({
        el: "#app",
        data: {
            list: [
                {id:1,name:"xiaomingxiaomao"},
                {id:2,name:"xiaohong"}
            ]
        }
    })
    var vm2 = new Vue({
        el: "#app2"
    })
</script>



# 私有过滤器
一些过滤器可能只在一个组建中使用,这时声明为全局过滤器会造成不必要的js加载,用户在访问一些未使用该过滤器的页面时还需要加载这个过滤器的js代码,造成资源额外开销,所以可以申请为私有过滤器。 演示如下:

var vm = new Vue({
    el: "#app",
    data: {
                
    },
    methods: {
                
    },
    //过滤器
    filters: {
        timeFormat1: function (value) {
            var dt = new Date(value);
            var yyyy = dt.getFullYear();
            var MM = dt.getMonth() + 1;
            var dd = dt.getDate();
            var hh = dt.getHours();
            var mm = dt.getMinutes();
            var ss = dt.getSeconds();
            return `${yyyy}-${MM}-${dd}  ${hh}:${mm}:${ss}`;
        },
        timeFormat2: function (value) {
            var dt = new Date(value);
            var yyyy = dt.getFullYear();
            var MM = dt.getMonth() + 1;
            var dd = dt.getDate();
            var hh = dt.getHours();
            var mm = dt.getMinutes();
            var ss = dt.getSeconds();
            return `${yyyy}${MM}${dd}日`;
        }
    }
})

此时的timeFormat和timeFormat2就只能在app中使用而无法在其他组件中使用。