如果说 CSS 是把样式从 HTML 剥离的技术, Stimulus 就是把 JS 从 HTML 剥离的技术, 结合 Turbolinks 一起使用, 开发效率和用户体验都很棒.
CSS 使用 class
链接HTML,Stimulus使用data-controller
链接HTML。
Stimulus 的代码一般长这样:
<button data-controller="user" data-action="user.action">
Text
</button>
当点击按钮的时候, Stimulus 会自动找到 user_controller.js 文件, 并调用 user_controller.js 中的 action 函数.
Rails的使用案例
https://www.jianshu.com/p/8b5e81216b83
Stimulus 增加了魔法属性data-action
,它描述了页面上的事件应该怎样触发控制器里的方法;
魔法属性 data-target
,它为你提供了在控制器作用域(controller’s scope)中寻找元素的途径(handle )。
ES6 规范
导出
export default命令:为模块指定默认输出(这样就不需要知道所要加载模块的变量名)
//a.js
let sex = "boy";
export default sex(sex不能加大括号)
//原本直接export sex外部是无法识别的,加上default就可以了.但是一个文件内最多只能有一个export default。
其实此处相当于为sex变量值"boy"起了一个系统默认的变量名default,自然default只能有一个值,所以一个文件内不能有多个export default。
// b.js
本质上,a.js文件的export default输出一个叫做default的变量,然后系统允许你为它取任意名字。所以可以为import的模块起任何变量名,且不需要用大括号包含
import any from "./a.js"
import any12 from "./a.js"
console.log(any,any12) // boy,boy
export default class extends Controller {
}
export 和 export default的区别
- export与export default均可用于导出常量、函数、文件、模块等
- 在一个文件或模块中,export、import可以有多个,export default仅有一个
- 通过export方式导出,在导入时要加{ },export default则不需要
- export能直接导出变量表达式,export default不行。
- 为模块指定默认输出(这样就不需要知道所要加载模块的变量名)
https://segmentfault.com/a/1190000010426778
https://www.jianshu.com/p/edaf43e9384f
导入
import { Controller } form "stimulus"
export default class extends Controller {
static targets = [ "source" ]
// ...
}
static targets 这行是什么? 在 Stimulus 加载控制器类时,它会在被称为目标(targets)的静态数组中寻找目标名称字符串。针对数组中的每个目标名称,Stimulus
会为你的控制器添加三个新属性。这里 "source" 这个目标名称就变成了这样三个属性:
-
this.sourceTarget
在控制器作用域内寻找到的第一个来源目标。如果没有找到,访问此属性会抛出一个错误 -
this.sourceTargets
在控制器作用域内寻找到的由所有来源目标组成的数组。 -
this.hasSourceTarget
如果找到了来源目标,返回 true,否则,返回 false。
常见的事件有一个速记符号 你可能已经注意到了我们省略了操作描述符中的 click->。那是因为 Stimulus 将点击事件设置成了操作 <button> 元素的默认事件。
未完成
网友评论