27
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

rails7で、Stimulusを使う

Last updated at Posted at 2024-07-31

はじめに

自分用の学習メモです。
Stimulusを使って、クリックすると色が変わるボタンを実装します。

実装

bootstrapを使って、ボタンを実装します

  <div class="btn btn-primary m-5">ボタン</div>

  
Stimulusコントローラを作成します。

rails generate stimulus btn

これで、app/javascript/controllers/btn_controller.jsというファイルが作成されます。

import { Controller } from "@hotwired/stimulus"

// Connects to data-controller="btn"
export default class extends Controller {
  connect() {
      console.log("こんにちは!")
  }
}

  
HTMLにStimulusコントローラを適用するには、データ属性を使用します。div要素にdata-controller="btn"を追加します。

  <div class="btn btn-primary m-5" data-controller="btn">ボタン</div>

コンソールに、こんにちは!が出力されれば成功です。


data-btn-target="btn"を追加します。

<div class="btn btn-primary m-5" data-controller="btn" data-btn-target="btn">ボタン</div>

この属性により、btnコントローラの中で特定のHTML要素をターゲットとして識別できるようになります。


btn_controller.jsにclassを変更するメソッドを追加します。
export default class extends Controller {
  static targets = ['btn'];

  change_color() {
    const btn = this.btnTarget;
    if (btn.classList.contains('btn-primary')) {
      btn.classList.replace('btn-primary', 'btn-success');
    } else if (btn.classList.contains('btn-success')) {
      btn.classList.replace('btn-success', 'btn-danger');
    } else if (btn.classList.contains('btn-danger')) {
      btn.classList.replace('btn-danger', 'btn-primary');
    }
  }
}

replace(変更前のclass,変更後のclass)ここで、classを変更して色を変えています。


 <div class="btn btn-primary m-5" data-controller="btn" data-btn-target="btn" data-action="click->btn#change_color">ボタン</div>

data-action="click->btn#change_colorを設定し,この要素をクリックすると、btnコントローラのchange_colorメソッドが呼び出されます。

最後に

これで、クリックすると色が変わるボタンを実装できました。

27
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?