externalClasses与addGlobalClass之间的冲突
官方文档记录
- styleIsolation
styleIsolation 选项从基础库版本 2.6.5 开始支持。它支持以下取值:
isolated 表示启用样式隔离,在自定义组件内外,使用 class 指定的样式将不会相互影响(一般情况下的默认值);
apply-shared 表示页面 wxss 样式将影响到自定义组件,但自定义组件 wxss 中指定的样式不会影响页面;
shared 表示页面 wxss 样式将影响到自定义组件,自定义组件 wxss 中指定的样式也会影响页面和其他设置了 apply-shared 或 shared 的自定义组件。(这个选项在插件中不可用。) - addGlobalClass
小程序基础库版本 2.2.3 以上支持 addGlobalClass 选项,即在 Component 的 options 中设置 addGlobalClass: true 。 这个选项等价于设置 styleIsolation: apply-shared ,但设置了 styleIsolation 选项后这个选项会失效。 - externalClasses
有时,组件希望接受外部传入的样式类。此时可以在 Component 中用 externalClasses 定义段定义若干个外部样式类。
问题描述
https://developers.weixin.qq.com/community/develop/doc/00002ae55d4ae87bf7d78dfe156c00?highLine=externalClasses%E5%A4%96%E9%83%A8%E6%A0%B7%E5%BC%8F%E7%B1%BB
该链接里有解释,为什么有些子组件类名添加前缀(前缀来源组件文件名)。
情况1:在设置了addGlobalClass后,子组件的类名并不会添加前缀。
情况2:在设置了externalClasses后,子组件在使用externalClasses定义的类名时不会添加前缀。
情况3:在同时设置了addGlobalClass与externalClasses后,子组件的类名并不会添加前缀。通过externalClasses定义的类名在调试器的Wxml里查看时,在子组件的dom上显示会添加前缀,外部定义样式失效(因为两个类名不同)。
下面着重解决第三种情况
问题解决
情况3下,引入的类名的前缀和子组件的名称是有关的,子组件如果/component/form/form.wxml,则前缀为form--my-class
,但是有一种情况,如果页面组件引用的组件内有组件的文件名 name.indexOf(‘form’)!==-1,则这个前缀还会加长,如form-form--my-class
。(我这边是测试了页面组件引用了aa-form
,aa-form
里引用了form
组件,导致出现form-form--my-class
,当我把aa-form
改成aa-modal
,则恢复成form--my-class
)。
在定义外部样式类时,最好除了my-class
,顺便把组建名-my-class
也给定义了。