因此,我的控制器的結構可能是由此造成的。在這裏,您可以看到parent和child控制器,但重要的部分是在這裏:加載或導航時,控制器加載順序不同
父控制器
//Load version
$scope.person = People.people.get({ id: $routeParams.id}, function(person) {
var associations = {
events: person.events || [],
people: person.people || [],
places: person.places || []
};
$scope.$broadcast('setAssociations', associations);
});
//Event version
$scope.$on('getAssociations', function(e, args) {
var associations = {
events: $scope.person.events || [],
people: $scope.person.people || [],
places: $scope.person.places || []
};
$scope.$broadcast('setAssociations', associations);
});
兒童控制器
$scope.$on('setAssociations', function(event, args) {
$scope.parentEvents = args.events;
});
$scope.$emit('getAssociations', {});
的想法是,我需要將父母的person
對象的events
下載到子控制器。問題是,從母公司募集setAssociations
的每種方法僅適用於一種情況。
load
版本在頁面從應用程序(哈希,導航)內導航到時起作用。但是,當從外部重新加載或導航(滿載)時,子事件從未被提出,可能是因爲它尚未註冊其聽衆。
event
版本在頁面刷新或導航到應用程序外部(導致頁面完全加載的任何內容)時起作用。導航到時,$scope
爲空,但此方法失敗。
因此,當進行「深度鏈接」或刷新以及進行內部導航時,應用程序加載控制器的順序不同。 如何從具有父子關係的角度控制器獲得一致的負載行爲?
是的,謝謝你,這比我所做的要好得多。我在角度教程或概述中沒有看到這個地方!這是一個完美的技術,他們爲什麼不告訴你呢? – Tyrsius
嗯,我應該提到以這種方式共享數據不是'最佳實踐',因爲這種方式假設了特定的父子DOM結構。如果你有一天決定讓孩子成爲同齡人而不是孩子,那麼這種技術就會失敗。首選技術是創建一個服務,並讓父控制器和子控制器注入該服務 - 函數MyCtrl($ scope,myService) - 並將共享數據存儲到服務中並從中訪問。示例小提琴:http://jsfiddle.net/whnSs/ –
另請參見http://stackoverflow.com/questions/12008908/pass-variables-between-controllers –