我有两个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' } } }
{ 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 举报,一经查实,本站将立刻删除。