You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在页面加载时调用Stimulus controller的函数?

页面加载时触发Stimulus Controller内函数的实现方案

首先先修正你贴出的代码里的两处语法错误,不然逻辑跑不通:

  • jQuery的显示/隐藏切换方法是toggle,你写成了tpggle,属于拼写错误
  • 代码里$(this.testTargets[0]缺少闭合的右括号

Stimulus本身提供了两种零额外依赖的实现方式,不需要手动写DOM加载监听事件:

方案1:利用内置的connect生命周期钩子(推荐)

每个Stimulus Controller都自带生命周期回调,其中connect()方法会在Controller绑定的DOM元素渲染完成、页面初始加载结束后自动执行,你可以直接在这个方法里调用需要触发的hide函数,只需要补全函数依赖的checked参数即可。
完整代码示例:

import { Controller } from "@hotwired/stimulus"

export default class extends Controller {
  // 必须先声明用到的target,否则无法通过this.testTargets获取元素
  static targets = ["test"]

  connect() {
    // 替换成你实际用来触发切换的复选框元素,这里示例是从当前controller根元素下找checkbox
    const triggerCheckbox = this.element.querySelector('input[type="checkbox"]')
    // 构造和原生事件结构一致的参数,直接复用hide方法
    this.hide({
      currentTarget: triggerCheckbox
    })
  }

  hide(event) {
    // 修正了原代码的拼写和括号问题
    $(this.testTargets[0]).toggle(event.currentTarget.checked)
  }
}

方案2:使用Action的@load修饰符

如果不想在Controller里写生命周期逻辑,可以直接在DOM的action绑定上添加@load修饰符,Stimulus会在页面加载完成后自动触发绑定的方法,同时自动把当前元素作为event.currentTarget传入,和你原来绑定的change事件逻辑完全兼容,不需要修改hide方法的代码。
DOM写法示例:

<div data-controller="toggle">
  <!-- 同时绑定change事件和页面加载触发,两种场景复用同一个hide方法 -->
  <input type="checkbox" data-action="toggle#hide @load->toggle#hide">
  <div data-toggle-target="test">
    这是需要被切换显示/隐藏的内容块
  </div>
</div>

注意:如果你的触发复选框有默认选中/未选中的初始状态,这两种方案都会在页面加载时正确读取初始状态,执行对应的显示/隐藏逻辑,不会出现页面加载后内容状态和复选框状态不匹配的问题。

内容的提问来源于stack exchange,提问作者learn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 23:39:26