2016-01-16 83 views
2

我與角2測試試驗,並希望使用語義UI下拉控制,角2的組成部分。角2分量雙向數據綁定使用對象

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

我的小樣本項目是在這裏:

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

我把它包一個角2部分 'UiSelectComponent' 裏面,你可以在這裏看到:

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

任何其它組分應該使用UiSelectComponent b傳遞給它兩個對象:一個數組包含可能的選擇和一個可選的預定義選擇選項。我爲「SelectOption」選擇了一個界面,它有兩個屬性'value'(數字)和'displayValue'(字符串)。該組件應該使用這樣的:

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

第一個問題: 我想實現的是,該預先選定的選項將被傳遞給UiSelectComponent,用戶選擇改變該選項該選項還應該從父組件中更改所選對象。很明顯,父組件需要知道,從UiSelectComponent中選擇的選項是什麼,對吧?

第二個問題: 設置語義UI下拉內部的初始選擇的選項,如果我換一個的setTimeout()函數內.dropdown()函數只是工作。我認爲,Angular 2不再需要這些東西來使更改可見?

我嘗試了一切可能的辦法,我已經找到了最後兩天 - 現在我需要你的幫助:)

在此先感謝!

回答

3

第一個問題:你可以使用輸出(EventEmitter)屬性,當你在一個孩子改變一些東西發出的事件父。您的父母模板需要聽取以下活動:<child (someChildEvent)="myCallback()" ...>

但是,如果你想分享的選項數據是要傳遞給孩子– <child [someChildProperty]="sharedObj" ...>對象的內部,父母和孩子都有相同的/一個sharedObj一個參考,讓您在做出任何改變該孩子在父母中可見。該EventEmitter可能是一個更好的選擇,因爲那樣的話,當變化發生時,你實際上可以通知家長......但該事件實際上並沒有傳遞任何值,因爲父已經可以看到,被以sharedObj所做的任何更改。

第二個問題:我不敢看你的代碼,但你可能需要超時,因爲你可能需要等待您的第三方組件呈現或完成初始化。

+0

謝謝您的回答,但它並沒有解決我的問題。我做了一些非常小的例子,你可以看到問題。 ** angularjs 1.4 **工程:[https://plnkr.co/edit/jAzd9SfoaE3j8HLUCfS2?p=preview](https://plnkr.co/edit/jAzd9SfoaE3j8HLUCfS2?p=preview)** angular 2 ** doesn' t:[http://plnkr.co/edit/IkLKzFO77lL4BBRIcvOB?p=preview](http://plnkr.co/edit/IkLKzFO77lL4BBRIcvOB?p=preview)...我看到了什麼問題,雖然..我重新分配對象this.selected = {..}。但是它在angularjs 1.4中的工作就像我在第一個例子中所做的那樣。 – uNki

+0

@uNki,是的,重新分配子對象不起作用 - 父對象仍然有對其他/原始對象的引用。您必須發出()事件以通知Angular 2中的父級。這是因爲Angular 2在更改檢測時使用的單向數據流:輸入屬性僅從父級傳播到子級。要走相反的方向,你需要發出()一個事件。在Angular 1中,'='可以在兩個方向上進行。 –

3

既然沒有雙向數據在特定意義上的角2結合了,你總是必須明確地傳播更改。

當您的choice更改爲<child>時,您將使用EventEmitter發出活動。然後,任何父組件可以訂閱該事件的聲明使用事件綁定語法<child (selectedChange)="doSth()">

這裏有一個工作普拉克:http://plnkr.co/edit/2SsgStP3P4DNgXEES8c8?p=preview

+1

Btw你可以結合屬性和事件綁定,並使其成爲一個實際的雙向數據綁定指令。例如。 '[(selectedChoice)]'內部是'@Input()selectedChoice'和'@Output selectedChoiceChanged'加上一些'$ event'數據提取。你可以從'NgModel' – PascalPrecht

+0

複製它,謝謝Pascal!爲了完整起見,我已經更新了相應的plunk:[http://plnkr.co/edit/10T544XDWIuYLvmOQXki?p=preview](http://plnkr.co/edit/10T544XDWIuYLvmOQXki?p=preview) – uNki