首先,微信小程序端父页面与子组件之间存在样式隔离,如下图所示:
但是在uniapp中,父子组件却可以直接进行样式传递。 父页面的style:
.componentstyle{
background-color: yellow !important;
height: 2000rpx;
width: 1000rpx;
}
子组件的style:
.componentstyle{
background-color: red;
height: 200rpx;
}
效果如下图
可以看出父组件的样式直接影响到了子组件(背景色以及宽度被更改),但是未加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这个属性,使得全局样式以及父页面样式能影响到子组件。