关于Stimulus框架hasClass逻辑及取值为false场景的问询
Stimulus中
this.has[LogicalName]Class取值为false的场景 你混淆了Stimulus中「逻辑类名的配置」和「CSS类的实际应用」两个概念:this.has[X]Class的作用是检测控制器元素当前是否存在对应配置的CSS类,而非检测逻辑类名是否被定义。以下是它取值为false的场景:
- 未配置对应逻辑类名:如果控制器元素没有通过
data-{controller}-{logical-name}-class属性绑定CSS类(比如你的例子里去掉data-example-hidden-class="hidden"),哪怕元素上有hidden类,this.hasHiddenClass也会返回false——因为Stimulus不知道hidden这个逻辑名对应哪个CSS类。 - 配置了逻辑类名但元素未应用该CSS类:比如你的HTML是
<div data-controller="example" data-example-hidden-class="hidden">,元素初始没有hidden类,此时this.hasHiddenClass为false;只有当你通过this.addHiddenClass()或手动给元素添加hidden类后,它才会变为true。 - 已应用的CSS类被移除:如果之前通过
this.addHiddenClass()让元素加上了hidden类(此时hasHiddenClass为true),之后调用this.removeHiddenClass()或通过其他方式移除了hidden类,this.hasHiddenClass就会变回false。
官方文档核心说明(翻译)
Stimulus的CSS类关联系统中,
has[LogicalName]Class属性用于检查控制器元素当前是否拥有通过data-controller-*-class配置的对应CSS类,而非检查该逻辑类名是否存在配置。
内容的提问来源于stack exchange,提问作者CafeHey
相关产品推荐
相关产品推荐

