关于uniapp编译成微信小程序子组件能继承父组件样式的问题。

723 阅读1分钟

首先,微信小程序端父页面与子组件之间存在样式隔离,如下图所示:

微信图片_20230106113117.png

但是在uniapp中,父子组件却可以直接进行样式传递。 父页面的style:

.componentstyle{
        background-color: yellow !important;
        height: 2000rpx;
        width: 1000rpx;
}

子组件的style:

.componentstyle{
    background-color: red;
    height: 200rpx;
}

效果如下图

子组件.png

可以看出父组件的样式直接影响到了子组件(背景色以及宽度被更改),但是未加important标签的高度属性未被更改。 看了半天,最终在uniapp编译后的文件中发现了这么一段话。

  var options = _objectSpread({
    multipleSlots: true,
    addGlobalClass: true },
  vueOptions.options || {});


  {
    // 微信 multipleSlots 部分情况有 bug,导致内容顺序错乱 如 u-list,提供覆盖选项
    if (vueOptions['mp-weixin'] && vueOptions['mp-weixin'].options) {
      Object.assign(options, vueOptions['mp-weixin'].options);
    }
  }

目测是uniapp在编译后的文件中,对所有的组件以及页面增加了 addGlobalClass: true这个属性,使得全局样式以及父页面样式能影响到子组件。