学习 Stimulus 的最简单方式就是构建一个简单的控制器。这一章咱们就来学习一个。html
要往下继续,你须要运行一个 stimulus-starter ,它是一个用于探索 Stimulus 的预配置骨架。 git
推荐使用 remixing stimulus-starter on Glitch ,这样就能完整地在浏览器里运行了,并且不须要再安装其余东西:
Remix on Glitchgithub
或者,若是你喜欢使用本身的温馨的文本编辑器,您将须要克隆并设置stimulus-starter:浏览器
$ git clone https://github.com/stimulusjs/stimulus-starter.git $ cd stimulus-starter $ yarn install $ yarn start请输入代码
而后在浏览器中访问 http://localhost:9000/
。框架
(注意 stimulus-starter 使用 Yarn 来管理依赖,你得先安装它。)编辑器
咱们从一个简单的练习开始:带按钮的文本域。点击按钮时,让文本域的值显示在控制台。 ide
每一个 Stimulus 项目都是从 HTML 开始的,此项目也不例外。编辑public/index.html
并在<body>
标签后面添加如下代码:学习
<div> <input type="text"> <button>Greet</button> </div>
而后刷新页面,便能看到文本域和按钮了。ui
做为其核心,Stimulus 的目标是自动将 DOM 元素链接到 JavaScript 对象。这些对象由控制器调用。 this
咱们一块儿来经过拖拽框架内置的控制器类建立第一个控制器。在 src/controllers/
文件夹里建立一个hello_controller.js
文件。而后放入如下代码:
// src/controllers/hello_controller.js import { Controller } from "stimulus" export default class extends Controller { }
下一步,咱们须要告诉 Stimulus 控制器应该怎样链接到 HTML。在 <div>
的 data-controller
属性中添加标识符便可:
<div data-controller="hello"> <input type="text"> <button>Greet</button> </div>
标识符充当了元素和控制器之间的连接。在此例中,标识符hello
告诉 Stimulus 去hello_controller.js
建立一个控制器的实例。在安装指南中能够了解更多关于如何动态加载控制器。
刷新页面,你会看到任何改变都没有。咱们应该如何知道控制器有没有生效?
一种方式是在 connect()
方法中添加一个 log 状态,控制器连接到
HTML 时 Stimulus 就会触发它。
在 hello_controller.js
实现 connect()
方法:
// src/controllers/hello_controller.js import { Controller } from "stimulus" export default class extends Controller { connect() { console.log("Hello, Stimulus!", this.element) } }
刷新页面,你就能在控制台中看到Hello, Stimulus!
了。
如今,咱们看下,如何修改代码让 log 信息在点击“Greet”按钮时显示。
首先,将 connect()
重命名为 greet()
:
// src/controllers/hello_controller.js import { Controller } from "stimulus" export default class extends Controller { greet() { console.log("Hello, Stimulus!", this.element) } }
咱们想要在按钮的点击事件触发时调用greet()
方法。在 Stimulus 中,处理事件的控制器方法叫作操做(action)方法。
将 action 方法链接到按钮的点击事件。public/index.html
并添加魔法属性data-action
到按钮上:
<div data-controller="hello"> <input type="text"> <button data-action="click->hello#greet">Greet</button> </div>
操做描述符(action descriptor)解释
data-action
的值value click->hello#greet
被成为操做描述符。这里的意思是:
click
是事件名称hello
是控制器标识符greet
要调用的方法名刷新页面并打开开发者控制台。你就能在点击“Greet”按钮时看到 log 信息了。
咱们即将完成这次练习,修改 action 使其对咱们输入到文本域里的任何名字都说 hello。
要实现它,首先咱们须要在控制器中引用 input
元素。而后就能经过读取它的值获取输入的内容了。
Stimulus 让咱们将重要元素标记为目标(target),而后咱们就能轻松地在控制器中经过相应的属性引用这些元素了。打开public/index.html
添加魔法属性data-target
到 input
元素:
<div data-controller="hello"> <input data-target="hello.name" type="text"> <button data-action="click->hello#greet">Greet</button> </div>
﹟目标描述符(Target Descriptors)解释
data-target
的值hello.name
被称为目标描述符. 这里的意思是:
hello
是控制器标识符name
是目标的名称
在咱们将 name
添加到控制器的目标描述符列表中时,Stimulus 会自动建立一个this.nameTarget
属性,它会返回第一个匹配到的目标元素。咱们可使用这个属性读取元素的值并构建欢迎字符串。
咱们来试试。打开hello_controller.js
而后这样修改:
// src/controllers/hello_controller.js import { Controller } from "stimulus" export default class extends Controller { static targets = [ "name" ] greet() { const element = this.nameTarget const name = element.value console.log(`Hello, ${name}!`) } }
而后刷新页面,打开控制塔。在输入框中输入你的名字,点击“Greet”按钮。Hello, world!
咱们已经知道 Stimulus 控制器是 JavaScript 类的实例。该类的方法能够做为事件处理器使用。
这意味这咱们拥有了标准的重构技术兵工厂。好比,咱们能够经过提取name
getter 来清理 greet()
方法:
// src/controllers/hello_controller.js import { Controller } from "stimulus" export default class extends Controller { static targets = [ "name" ] greet() { console.log(`Hello, ${this.name}!`) } get name() { return this.nameTarget.value } }
恭喜!你写出了你的第一个 Stimulus 控制器!
本文咱们覆盖了该框架的核心概念:controllers, identifiers, actions, 和 targets。在下一章,咱们将了解如何组件这些东西构建正儿八经的控制器,呃,像 Basecamp 那样。
Next: Building Something Real