Vue 利用extend在父组件内动态注册子组件

前言:我在上家公司遇到一个需求,就是有一个组件库现有四十多个组件,未来可能还会更多。它们都是渲染到同一个位置,但是根据项目场景不同一次只会用到组件库里的某几个组件。如果我将组件全部引入进页面,那将是庞大的体力活,而且后续追加组件我还得来改代码。最后找到了动态注册组件的方式,每次根据后端返回的参数动态加载需要的组件。我就是根据下面的一个例子来实现自己需要的功能的,例子:

// Vue 利用extend在父组件内动态注册子组件
<template>
    <div class="testPage">
        <Button type="primary" @click="btnClickHandle">显示</Button>
        <div ref="xxx"></div>
    </div>
</template>

<script>
    import Vue from "vue";
    import store from "@/store";
    export default{
        name: "testPage",
        data(){
            return {}
        },
        methods: {
            registerComponent(name){
                return import("./component" + name)
            },
            btnClickHandle(){
                let name = "test";
                this.registerComponent(name).then(component => {
                    const cpt = Vue.extend(component.default);
                    new cpt({
                        store,
                        el: this.$refs.xxx,
                        //data: { // 传值
                        //    id: ''
                        //},
                        //propsData: {
                        //    devid: ''
                        //}
                    })
                })
            }
        }
    }
</script>

<style lang="less">
    .testPage{
        width: 100%;
        height: 100%;
    }
</style>

感谢上家公司同方赛威讯给了我一个学习和成长的平台,感谢曾经帮助过我的人们,祝你们工作顺利,生活愉快!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue中,组件默认情况下无法直接继承组件的CSS样式。这是因为Vue组件化设计思想中,每个组件都应该是独立封装的,避免样式的冲突和耦合。 但是,你可以通过一些方法实现组件继承组件的CSS样式。下面有几种常用的方法: 1. 使用`inherit`关键字:在组件的CSS样式中使用`inherit`关键字,将需要继承的样式属性设置为`inherit`,然后在组件中引用组件的样式即可继承这些属性。例如: ```css /* 组件样式 */ .parent-component { color: inherit; } /* 组件模板 */ <template> <div class="parent-component"> <!-- 组件内容 --> </div> </template> ``` 2. 使用`$style`对象:在Vue中,每个组件都会生成一个`$style`对象,它包含了该组件所使用的所有CSS样式。通过在组件中引用组件的`$style`对象,就可以使用和继承组件相同的样式。例如: ```css /* 组件样式 */ .parent-component { color: red; } /* 组件模板 */ <template> <div :style="$parent.$style"> <!-- 组件内容 --> </div> </template> ``` 3. 使用CSS预处理器的`@extend`语法:如果你在使用CSS预处理器(例如Sass、Less等),可以使用`@extend`语法来继承组件的样式。首先在组件中定义一个可继承的样式类,然后在组件中扩展该样式类。例如: ```scss /* 组件样式 */ .parent-component { color: red; } /* 组件样式 */ .child-component { @extend .parent-component; } ``` 以上是几种常见的实现组件继承组件CSS样式的方法,你可以根据具体需求选择适合的方法来解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yongqiang Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值