我有一個頁面控制器,這裏簡化訪問父控制器n級更高
angular.module('app').controller('MyCtrl', function() {
this.name = 'David'
});
我使用controllerAs語法在我的模板(MyCtrl爲主),所以我只是用main.name我模板來訪問該名稱。都好。
在我的模板中,我有一堆嵌套的指令,創建新的示波器和底部的某處我有一個ng = controller =「SubCtrl as subController」。我現在可以通過執行subcontroller.property來訪問子控制器上的屬性,並且在該模板中,我仍然可以訪問main.name,因爲controllerAs非常棒。
麻煩的是,在我的第二個控制器代碼中,我需要訪問父級控制器中的東西,這個東西在這個層次上是深度較深的。我知道我可以在主控制器做到這一點是這樣的...
$scope.main = this;
,然後做這個第二控制器
var main = $scope.$parent.$parent.$parent.$parent.main;
但我們都知道,我們不應該這樣做,我贏了無論如何,我不知道有多少層次的深度,因爲我不知道開發人員將多少個指令放在裏面,從而創建一個新的範圍。
我聽到一些人在討論爲此創建服務,但這聽起來像一般很難做到,而且我不希望我的框架的用戶在每次將包含內容時都必須創建服務一個標籤面板,這將是瘋狂的。
因此,我目前的想法是使用範圍並編寫一個函數,它將遍歷父範圍,直到找到使用比較函數指定的範圍。我覺得可能有更好的方法。
誰會在不暴露問題的情況下投下一個問題?我認爲我解釋得很好,這是一個完全正確的問題。 – jonhobbs
那麼爲什麼不創建一個服務?服務是存儲數據或訪問多個控制器,指令,工廠等所需內容的好地方。它基本上是一個單身人士,你在多個地方注入,但它始終是同一個實例注入。它非常易於使用,並且比您想到的更脆弱($ parent。$ parent.n ..... data)。如果你正在進行單元測試,它也是可測試的。 – Igor
我一直在那裏,並且我向你保證,如果你想在控制器之間共享信息,沒有什麼比服務更好。例如:用於在用戶'infoService'上存儲信息的服務。 'mainCtrl'可以做'infoService.registerUser({name:'David'})'然後'subCtrl'可以做'infoService.getLatestUser()' – pavlag