我想將控制器中定義的功能公開給子控制器。本質上是這樣的:解決控制器?
.state('parent', {
controller: 'ParentCtrl',
})
.state('parent.child', {
controller: 'ChildCtrl', // how to inject ParentCtrl?
})
當然,這是不可用的。那麼如何解決?讓我們嘗試:
.state('parent', {
resolve: {
ParentCtrl: 'ParentCtrl',
}
})
.state('parent.child', {
resolve: {
ChildCtrl: 'ChildCtrl', // just declare ParentCtrl as injected dependency
}
})
這是不行的,不過,如果ParentCtrl或ChildCtrl與angular.controller
聲明角控制器:
http://plnkr.co/edit/ggHkZTkQJSsL24sm7X2V
所以,如果我們讓他們的服務是什麼?
http://plnkr.co/edit/Sl1qxWcub6bvXZfPEvHE
嘿,這工作!但是如果我想將已解決的依賴注入到它呢?那麼,這是行不通的。只有一個服務的實例可以同時存在,無論如何,和解析的依賴不在範圍內爲其創造:
http://plnkr.co/edit/gsvJlJSpx2WEB1s6l7NU
這是不幸的UI路由器不會解決控制器。看來唯一的解決方案是用一個解決依賴定義我的控制器爲angular.constant
,然後將其注入到我的模塊的config
,然後構造一個控制器:
http://plnkr.co/edit/8gGKNxjpv2OgS0obNvVi
有沒有更好的選擇?
你的演示不會像我想在我的最後一個例子中那樣向控制器注入'dep',但'$ controller'服務就是我正在尋找的。我能夠得到[更接近我想要的東西](http://plnkr.co/edit/IXkONlZDW7xH4kfdAjus)。它是無關的,但我知道'controllerAs'會讓我從子內部訪問父控制器,如果我要注入'$ scope',我試圖避免,因爲在文章中提到的同樣的原因鏈接。 – 2014-09-05 04:19:14
@JohnFreeman Ofcourse您可以使用'$ controller'構造函數注入任何依賴項(這真的很常見),但是在您的問題中沒有提到。其實我讀一下你的問題有點困惑。 – PSL 2014-09-05 11:15:23