我正在构建一个非常简单的应用程序,我有一个GlobalController(在body元素上),并且下面会有另一个子控制器。这是一个具有多个物理页面的模板化站点,这样子控制器将是不同的,但最多只有顶级全局一个和一个子一个。
我正在尝试创建全局函数,任何子控制器都可以使用它来运行每个需要运行的代码,而不必复制每个子控制器中的功能。
我可以做的一种方法是将$ rootScope和emit()消息包含在使用$ on()监听它们的GlobalController中。
我认为这不是一个“好”的方式来做到这一点。相反,我已经了解到为此使用服务更好。我现在仍然坚持如何实现这项服务。
我目前有一个像这样的全局控制器:
var globalModule = angular.module('DoSquareStuff', ["ngRoute","list", "savings-video"]);
// there will be a long list of modules that will be added after "savings-video"
globalModule.factory('squareMgr', function() {
var squares = SUYS.squares; // global obj with earned[] and placed[]
return {
getSquaresEarned: function() {
return squares.earned;
},
getSquaresPlaced: function() {
return squares.placed;
},
setThisSquareEarned: function(value) {
squares.earned.push(value);
},
setThisSquarePlaced: function(value) {
squares.placed.push(value);
},
earnedThisSquare: function(squareNum) {
return ~squares.earned.indexOf(squareNum);
},
placedThisSquare: function(squareNum) {
return ~squares.placed.indexOf(squareNum);
}
}
});
globalModule.controller('GlobalController', function($scope, $squareMgr){
// this would be easy... but it doesn't work
// $rootScope.$on('signal.missionComplete', function (event, missionId) {
// console.log("parentScope receive notice that mission " + missionId + " is complete.");
// });
log('GlobalController loaded');
// log($squareMgr.getSquaresEarned()); //broken
});
然后,阅读文档,我试过:
globalModule.controller('GlobalController', ['squareMgr', function($squareMgr){
// but then how do I get $scope in there?
log('GlobalController loaded');
// log($squareMgr.getSquaresEarned());
}]);
答案 0 :(得分:1)
在上一个代码块中,您还需要注入$ scope。您可以注入所需的任何数量的服务:
globalModule.controller('GlobalController', ['squareMgr', '$scope',
function($squareMgr, scope){
// but then how do I get $scope in there?
log('GlobalController loaded');
// log($squareMgr.getSquaresEarned());
}]);
还有一点,我不会在squareMgr前放$
,$
意味着它是一个内置的角度服务。
答案 1 :(得分:0)
尝试
globalModule.controller('GlobalController', ['squareMgr', '$scope', function($scope, squareMgr){ .....
$ sign用于区分Angular服务和您自己的