Ist es gut, einen Hauptcontroller in Angular zu haben?
Ich weiß nicht, ob dies ist eine gute übung... ich habe einen controller definiert, die in der route-config, aber da meine HomeCtrl
ist in ng-if
Aussage, die er nicht hören loginSuccess
also machte ich MainCtrl
das hört sich für loginSuccess
und reagiert entsprechend. Dieser code funktioniert Prima, aber diese riecht wie ein hack zu mir. Sollte ich zu entfernen MainCtrl
und machen es zu einem service? Wenn ja, ein Beispiel wäre echt Super.
Index.html
<body ng-app="myApp" ng-controller="MainCtrl">
<div ng-if="!isLoged()">
<signIn></signIn>
</div>
<div ng-if="isLoged()">
<div class="header">
<div class="nav">
<ul>
<a href="/"><li class="book">navItem</li></a>
</ul>
</div>
</div>
<div class="container" ng-view=""></div>
</div>
</body>
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);
}
};
}]);
InformationsquelleAutor der Frage dinodsaurus | 2013-12-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beginne ich alle meine Winkel-Projekte mit:
<html ng-app="appName" ng-controller="appNameCtrl">
Den Einsatz eines "global" - controller möglicherweise nicht notwendig sein, aber es ist immer schön, es zu haben um, wenn die Notwendigkeit entsteht. Zum Beispiel, ich benutze es in mein CMS zu setzen, eine Bindung, initiiert das laden der alles andere - also alle sub-Controller geladen werden, weil es. Das ist nicht gegen die Trennung von Bedenken, da der Globale controller Anliegen IST, um das laden von anderen Controllern.
Sagte, nur sicher sein, um die Dinge so modular/getrennte und wiederverwendbar wie möglich. Wenn Ihr Controller verlassen sich auf die globalen controller-Existenz, um zu funktionieren, dann gibt es ein Problem.
InformationsquelleAutor der Antwort m59
Meiner Meinung nach angular js' power kommt mit der Trennung klar, die verschiedenen Controller, Direktiven, services, Ressourcen usw.. Idealerweise Controller werden mit Vorlagen oder Teiltöne und werden verwendet, um zu aktualisieren Sie den front-end-und die Aufrufe zu services oder Ressourcen. Je früher Sie beginnen, diese Trennungen je früher Sie beginnen, reinigen Sie und skalierbare apps, die anderen können Entwickler sehr schnell Sinn machen. Für die app-Struktur, die ich würde empfehlen, du schaust in diese beiden tools:
Lineman.js
und
Yeomann
Den lineman Website tatsächlich hat eine wirklich gute Zusammenfassung, wie sich die beiden unterscheiden, wenn Sie nach unten scrollen.
In Ihrem Szenario gibt es viele Möglichkeiten, um link-Controller oder machen Sie Funktion Anrufe in verschiedenen Bereichen. Sie können entweder einen Dienst erstellen, der injiziert Controller, oder Sie können $emit und $auf das einrichten von Benachrichtigungen in der app, zB:
Im controller Ein
Und in Controller B oder jeder andere controller, den Sie anrufen könnte myFunction() mit:
InformationsquelleAutor der Antwort krosullivan