属性传递
/ / 阅读耗时预计 2 分钟1,传递参数到组件上
每个组件都是相对独立的,因此任何组件所需的数据都需要通过组件的属性把数据传递到组件中。
比如上篇Ember.js 入门指南之二十八组件定义的第三点{{component item.pn post=item}}
就是通过属性post把数据传递到组件foo-component
或者bar-component
上。如果在index.hbs
中是如下方式调用组件那么渲染之后的页面是空的。{{component item.pn}}
请读者自己修改index.hbs
的代码后演示效果。
传递到组件的参数也是动态更新的,当传递到组件上的参数变化时组件渲染的HTML也会随之发生改变。
2,位置参数
传递的属性参数不一定要指定参数的名字。你可以不指定属性参数的名称,然后根据参数的位置获取对应的值,但是要在组件对应的组件类中指定位置参数的名称。比如下面的代码:
准备工作:
1 | ember g route passing-properties-to-component |
调用组件的模板,传入两个位置参数,分别是item.title、item.body。
1 | <!-- app/templates/passing-properties-to-component.hbs --> |
准备需要显示的数据。
1 | // app/routes/padding-properties-to-component.js |
在组件类中指定位置参数的名称。
1 | // app/components/padding-properties-to-component.js |
注意:属性positionalParams指定的参数不能在运行期改变。
组件直接使用组件类中指定的位置参数名称获取数据。
1 | <!-- app/templates/components/passing-properties-to-component.hbs --> |
注意:获取数据的名称必须要与组件类指定的名称一致,否则无法正确获取数据。
显示结果如下:
Ember还允许你指定任意多个参数,但是组件类获取参数的方式就需要做点小修改。比如下面的例子:
调用组件的模板
1 | <!-- app/templates/passing-properties-to-component.hbs --> |
指定参数名称的组件类,获取参数的方式可以参考计算属性这章。
1 | // app/components/padding-properties-to-component.js |
下面看组件是怎么获取传递过来的参数的。
1 | <!-- app/templates/components/passing-properties-to-component.hbs --> |
显示结果如下:
到此组件参数传递的内容全部介绍完毕。总的来说没啥难度。Ember中参数的传递与获取方式基本是相似的,比如link-to助手、action助手。
br
博文完整代码放在Github(博文经过多次修改,博文上的代码与github代码可能有出入,不过影响不大!),如果你觉得博文对你有点用,请在github项目上给我点个star
吧。您的肯定对我来说是最大的动力!!