鍍金池/ 問答/C++  網(wǎng)絡(luò)安全  HTML/ vue如何傳遞一個filter到子組件(父組件需要指定子組件需要調(diào)用的filte

vue如何傳遞一個filter到子組件(父組件需要指定子組件需要調(diào)用的filter)?

自己封裝了一個table組件,參數(shù)有列頭數(shù)組,其中定義了要綁定的字段,現(xiàn)在的問題是我需要傳遞一個過濾器到table組件,傳遞的是String類型的過濾器名稱,但是在子組件里面該如何使用這個過濾器呢?

思路是,父組件里面定義好需要顯示的列,以及需要顯示的table數(shù)據(jù)。但是列有很多屬性,例如:綁定的字段、用什么過濾器等等;子組件根據(jù)不同列的屬性定義來具體顯示。

這是自定義組件myTable

    name: 'myTable',
    props: {
        tabHeades: Array,
        tabDatas: Array,
    },
    methods: {
        //filterName 需要調(diào)用的過濾器名稱
        //val 需要使用過濾器的值
        dynamicFilter(filterName, val) {
            //根據(jù)過濾器名稱得到過濾器方法
            let filterObj = this.$options.filters[filterName]
            //使用過濾器方法
            return filterObj(val)
        }
    },    
//這種調(diào)用方式太難看,希望組件里面可以使用 {{ xxx | yesOrNo }} 這種方式來使用過濾器
<span v-if="head.filter">{{ dynamicFilter(head.filter, scope.row[head.key]) }}</span>

調(diào)用(父)組件:(里面需要傳遞很少列,不同的列可能需要指定不同的filter)

    tabHeades: [
        {label: '編號', key: 'id', isHidden: true},
        {label: '是否顯示', key: 'IsShow', filter: 'yesOrNo'},//傳遞該列需要使用的過濾的名稱

    ],

目前這個代碼是可以得到預(yù)期效果的。

但是子組件里面的寫法感覺太不好看了,我希望子組件里面可以使用 {{ xxx | yesOrNo }} 這種方式來使用過濾器,該如何修改呢?

回答
編輯回答
尛曖昧

為什么不考慮把過濾器全局注冊呢?


更新一波
其實(shí)Vue的過濾器是可以傳參數(shù)的,你可以像這樣定義過濾器

Vue.filter('filter', function(val, name){//這是總的過濾器
  console.log(val, name)
    switch(name){//這里通過switch進(jìn)行匹配
      case 'filter1': 
        return filter1(val);
      case 'filter2': 
        return filter2(val)
    }
})
// 下面的方法才是你具體的某些過濾器的方法
function filter1(val){
  return val +  ': 我是filter1'

}
function filter2(val){
  return val +  ': 我是filter2'
}

然后使用的話,傳過濾器名字進(jìn)入就行了

<template>
    <div>
        {{'hahaha' | filter(filter)}}
    </div>
</template>

<script>
export default {
    props: ['filter']
}
</script>
2017年2月2日 23:37
編輯回答
熟稔

為啥不用mixin呢?寫一個mixin,哪里要用哪里引啊多好

2018年5月26日 18:13