2016-03-17 57 views
8

我希望能夠將參數傳遞給帶有ng-outlet的子組件。但我不知道該怎麼做。如何將特定綁定傳遞給Angular 1.5中的組件路由器引入的ng-outlet組件?

這裏是我的組件綁定的例子:

app.component('profile', { 
    bindings: { 
    section: '=', 
    currentUser: '<' 
    }, 
... 

一般情況下我調用這個像這樣:

<profile section="$ctrl.bio" current-user="$ctrl.selectedUser"></profile> 

而是我有這樣的:

<ng-outlet></ng-outlet> 

而且一通過配置文件的路由器。

$routeConfig: [ 
     { path: '/Profile/:id', name: 'Profile', component: 'profile' }] 

那麼,如何將火焰傳遞給這個組件,將其他基本綁定(可能無法編碼到URL中的綁定)傳遞給此組件?

謝謝你,幫助是非常讚賞

編輯:我已經被要求提供的想什麼,我做了更具體的例子。

我認爲這個概念問題相當清楚,但是這裏有一個特殊的情況,那就是路由參數明顯不足。在我的應用程序組件級別的說我有一個事件的回調函數,onDeleteItem(ID)

如何複製

bindings: { 
    onDeleteItem: "&" 
} 

... 

<some-component on-delete-item="$ctrl.onDeleteItem(id)"></some-component> 

與NG出口?

+0

你能舉一個例子來說明你想做什麼嗎? –

回答

6

我枕着docs,看到這個在路由器

bindings: { $router: '<' }

所以我就想好,如果該綁定可以得到填補中使用的部件之一,那麼爲什麼不能我們是否爲其他綁定傳遞數據,但是我查看了組件路由器的源代碼,實際上我沒有看到用這種方式傳遞數據的方法。這是因爲在這裏它看起來像它的specially handling passing in the $router,但我不認爲模板後修改:

activate(instruction) { 
    ... 
    this.controller.$$template = '<' + dashCase(componentName) + ' $router="::$$router"></' + dashCase(componentName) + '>'; 
    ... 
}; 


我會說雖然,你應該能夠通過數據,通過該組件使用

$routeConfig: [ 
    { path: '/Profile/:id', name: 'Profile', component: 'profile', data: { item1: 'item1'} }] 

,然後在組件的構造函數注入RouteData,但我認爲這僅僅是在角2,因爲我沒有看到角1個路由器實現它的。


所以研究的基礎上我已經做了,我不認爲你可以,或者是困難的。而且,相關:How to inject data into Angular2 component created from a routerhttps://github.com/angular/angular/issues/4452

5

即使通過ngOutlet,您也可以使用require參數(如https://docs.angularjs.org/guide/component中指定的)來要求父組件。這樣,您可以從子組件與父組件進行通信(即使父組件通過ngOutlet調用子組件也是如此)。這使得來自child => parent的通信成爲可能。對於父母=>孩子,即使感覺有點尷尬,你仍然可以使用相同的技術(你可以通過孩子的父母來獲得你需要的東西......)。也許更標準的東西已經存在,或即將實施。

+1

這實際上是一個非常好的解決方法 - 是的。通過要求父母,所有你想要通過的綁定都可以在父母控制器上訪問。 – tcmoore

相關問題