Angular 2 组件与对象的双向数据绑定(bind)

标签 angular semantic-ui angular2-directives

我正在尝试 Angular 2 beta,并希望使用 Semantic UI Dropdown 控件作为 Angular 2 组件。

http://semantic-ui.com/modules/dropdown.html#converting-form-elements

我的小示例项目在这里:

https://github.com/uNki23/angular2semantic/

我已将其包装在 Angular 2 组件“UiSelectComponent”内,如下所示:

https://github.com/uNki23/angular2semantic/blob/master/src/app/components/ui-select.component.ts

任何其他组件都应通过向其传递两个对象来使用 UiSelectComponent:一个包含可能选择的数组和一个可选的预定义选定选项。我为选择“SelectOption”创建了一个界面,它有两个属性“value”(数字)和“displayValue”(字符串)。该组件应该像这样使用:

https://github.com/uNki23/angular2semantic/blob/master/src/app/components/app.component.html

第一个问题: 我想要实现的是,预先选择的选项被传递到 UiSelectComponent,用户选择更改该选项并且该选项还应该更改从父组件中选择的对象。很明显,父组件需要知道,从 UiSelectComponent 中选择的选项是什么,对吧?

第二个问题: 如果我将 .dropdown() 函数包装在 setTimeout() 函数中,则在语义 ui 下拉列表中设置初始选定选项才有效。我想,Angular 2 不再需要那些东西来使更改可见?

过去两天我已经尝试了所有可能的方法 - 现在我需要你的帮助:)

提前致谢!!

最佳答案

第一个问题:当您更改子级中的某些内容时,您可以使用输出(EventEmitter)属性并向父级发出事件。您的父模板需要监听此事件:<child (someChildEvent)="myCallback()" ...>

但是,如果您要共享的选项数据位于要传递给子对象的对象内部 - <child [someChildProperty]="sharedObj" ...> ,则父对象和子对象都引用相同/一个 sharedObj ,因此您在子项在父项中可见。 EventEmitter 可能是更好的选择,因为这样您实际上可以在更改发生时通知父级...但事件实际上不必传递任何值,因为父级已经可以看到对 sharedObj 所做的任何更改。

第二个问题:我没有查看您的代码,但您可能需要超时,因为您可能需要等待第 3 方组件渲染或完成初始化。

关于Angular 2 组件与对象的双向数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34828726/

相关文章:

angular - 命名空间 'jasmine' 没有导出成员 'SpyObj'

css - 语义 UI 垂直对齐图标和菜单

javascript - 出于相同目的在两个地方使用路由器指令

Angular 2 - 使用 ngStyle 将背景图像转换为 html 文件

javascript - Angular 5 - react 形式 - 有没有办法使用变量来修补值?

javascript - Angular 5,组件正在无故初始化

jquery - 强制移除从远程 css 库继承的元素的悬停 css 效果

html - Semantic-UI - 如何设置百分比大小

angular - 是否可以测试 Angular 2 中是否存在自定义指令属性?

javascript - 尝试使用服务在组件之间传递数据