我不知道这是不是一个好习惯...我在路由配置中定义了一个控制器,但因为我HomeCtrl
在ng-if
声明中他不能听,loginSuccess
所以我做了MainCtrl
哪些听取loginSuccess
并做出适当的反应.这段代码工作正常,但这对我来说就像是一个黑客.我应该删除MainCtrl
并使其成为一项服务吗?如果是这样,一些例子真的很棒.
的index.html
App.js
angular.module('myApp', []) .config(function ($routeProvider) { $routeProvider .when('/', { templateUrl: 'views/main.html', controller: 'HomeCtrl' }) .otherwise({ redirectTo: '/' }); }) .controller('MainCtrl', function ($scope) { $scope.user = false; $scope.isLoged = function(){ if($scope.user){ return true; }else{ return false; } } $scope.$on('event:loginSuccess', function(ev, user) { $scope.user = user; $scope.$apply(); }); }) .controller('HomeCtrl', function ($scope, $location) { //this is home controller }) .directive('signIn', function () { return { restrict: 'E', link: function (scope, element, attrs) { //go to the server and then call signinCallback(); } }; }) .run(['$window','$rootScope','$log',function($window, $rootScope){ $window.signinCallback = function (res) { if(res){ $rootScope.$broadcast('event:loginSuccess', res); } else{ $rootScope.$broadcast('loginFailure',res); } }; }]);
m59.. 10
我用以下内容启动所有Angular项目:
可能没有必要使用"全局"控制器,但在需要时随身携带它总是很好的.例如,我在我的CMS中使用它来设置一个绑定,启动其他所有内容的加载 - 因此所有子控制器都被加载.这并不违反关注点的分离,因为全球控制器的关注点是促进其他控制器的加载.
也就是说,只要确保尽可能保持模块化/分离和可重用的东西.如果您的控制器依赖于全局控制器的存在以便运行,则存在问题.