账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    vue如何传递一个filter到子组件(父组件需要指定子组件需要调用的filter)?
    64
    0

    自己封装了一个table组件,参数有列头数组,其中定义了要绑定的字段,现在的问题是我需要传递一个过滤器到table组件,传递的是String类型的过滤器名称,但是在子组件里面该如何使用这个过滤器呢?

    思路是,父组件里面定义好需要显示的列,以及需要显示的table数据。但是列有很多属性,例如:绑定的字段、用什么过滤器等等;子组件根据不同列的属性定义来具体显示。

    这是自定义组件myTable

        name: 'myTable',
        props: {
            tabHeades: Array,
            tabDatas: Array,
        },
        methods: {
            //filterName 需要调用的过滤器名称
            //val 需要使用过滤器的值
            dynamicFilter(filterName, val) {
                //根据过滤器名称得到过滤器方法
                let filterObj = this.$options.filters[filterName]
                //使用过滤器方法
                return filterObj(val)
            }
        },    
    //这种调用方式太难看,希望组件里面可以使用 {{ xxx | yesOrNo }} 这种方式来使用过滤器
    <span v-if="head.filter">{{ dynamicFilter(head.filter, scope.row[head.key]) }}</span>

    调用(父)组件:(里面需要传递很少列,不同的列可能需要指定不同的filter)

        tabHeades: [
            {label: '编号', key: 'id', isHidden: true},
            {label: '是否显示', key: 'IsShow', filter: 'yesOrNo'},//传递该列需要使用的过滤的名称
    
        ],

    目前这个代码是可以得到预期效果的。

    但是子组件里面的写法感觉太不好看了,我希望子组件里面可以使用 {{ xxx | yesOrNo }} 这种方式来使用过滤器,该如何修改呢?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 小子莫忘君 普通会员 1楼

      在Vue中,你可以通过props来传递filter。父组件需要在子组件中提供一个props对象,并且在子组件中需要通过props接收这个对象。以下是一个例子:

      在父组件中:

      ```html

      ```

      在子组件中:

      ```html

      ```

      在这个例子中,父组件通过props传递了一个filter参数,并在子组件中通过props接收这个参数。子组件在传递filter参数的同时,也会通过props接收并应用filter逻辑。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部