微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – VueJS扩展组件:删除父级的属性

我有两个Vue组件,一个扩展另一个

// CompA.vue

export default {
    props: {
        value1: Object,},data: function () {
        return {
            value2: 'hello2 from A',value3: 'hello3 from A'
        }
    }
}

// CompB.vue

import CompA from './CompA.vue';

export default {
    extends: CompA,props: {
        value4: Object
    },data: function(){
        return {
            value2: 'hello2 from B'
        }
    }
}

in the docs所述,CompB的选项合并为CompA,导致:

{
    props: {
        value1: Object,value4: Object
    },data: function () {
        return {
            value2: 'hello2 from B',value3: 'hello3 from A'
        }
    }
}

但是,我想要的结果是删除属性value1:

{
    props: {
        value4: Object
    },value3: 'hello3 from A'
        }
    }
}

我认为应该可以使用Custom Option Merge Strategies

但即使我返回null或undefined,也不会删除属性.

Vue.config.optionMergeStrategies.data = function(parentVal,childVal) {
    return null;
};

这样的事情甚至可能吗?如果有,怎么样?

解决方法

我不太清楚Vue.config.optionMergeStrategies如何工作,但这在测试环境中有效.

import CompA from './CompA.vue';
// make a deep clone copy of CompA. Here I'm just using a made up copy
// function but you Could use lodash or some other library. Do NOT use
// JSON.parse(JSON.stringify(...)) because you will lose functions. Also
// Object.assign will not work because Object.assign performs a shallow
// copy (meaning if you delete from props,which is a nested object,you
// will still globally delete the property).
import copy from "./utils" 
//copy CompA
let newCompA = copy(CompA)    
// delete the desired props
delete newCompA.props.value1

export default {
    // extend the copy
    extends: newCompA,data: function(){
        return {
            value2: 'hello2 from B'
        }
    }
}

基本上,在扩展组件之前删除不需要的道具.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐