Zum Beispiel mit diesem Controller:
angular.module('lsi.controllers').controller('MainController', MainController);
MainController.$inject = [
'$scope', '$q', 'Api', 'segments', 'ResourceService', 'AdminService','SweetAlertService', 'UsersCsvService', 'UsersSearchService', 'CriteriaService', '$rootScope'
];
function MainController($scope, $q, Api, segments, ResourceService, AdminService, SweetAlertService, UsersCsvService, UsersSearchService, CriteriaService, $rootScope) {
// code here
}
Was ist der beste Weg für zu lange $inject-Array- und / oder Controller-Argumente?
Ist es für Controller eine sehr schlechte Idee, Argumente zu verwenden?
function MainController() {
// code here
arguments[0].$on('', function() {});
}
Oder verwenden Sie einen Alias:
function MainController($scp, $q, Api, segments, ResSce) {
// code here
}
Vielen Dank.
Erstens haben $scope
, $rootScope
und $q
in Ihrem Controller nichts zu tun.
Ich verwende eine maximale Zeilengröße von 120 Zeichen in meinem Quellcode.
Wenn die Controller-Deklaration 120 Zeichen verschwindet, falte ich die Zeile vor dem Limit, dann falte ich die $inject
Zeile bezüglich der Stelle, an der ich die Controller-Deklaration gefaltet habe.
Beispiel :
MainController.$inject = [
'Api', 'segments', 'ResourceService', 'AdminService','SweetAlertService', 'UsersCsvService',
'UsersSearchService', 'CriteriaService'
];
function MainController(Api, segments, ResourceService, AdminService, SweetAlertService, UsersCsvService,
UsersSearchService, CriteriaService) {
// code here
}
In diesem Beispiel mit einer 120-Zeichen-Zeile könnte ich Folgendes haben:
MainController.$inject = [
'Api', 'segments', 'ResourceService', 'AdminService','SweetAlertService', 'UsersCsvService', 'UsersSearchService',
'CriteriaService'
];
function MainController(Api, segments, ResourceService, AdminService, SweetAlertService, UsersCsvService,
UsersSearchService, CriteriaService) {
// code here
}
Aber um die Konsistenz zwischen $inject
und der Controller-Deklaration zu wahren, falte ich die Zeile in $inject
wo ich die Zeile in der Controller-Deklaration falte.
Ich bin mir nicht sicher, ob Ihre Verwendung von arguments
mit dem Injektionssystem und der Verkleinerung von AngularJ funktioniert.
Danke für deine Antwort.
120 Zeichen Begrenzung ist eine gute Lösung, ich übernehme sie!
Warum sollten $rootScope
und $scope
nicht in meinem Controller sein?
Wie werden Ereignisse ohne $on
und $broadcast
gesendet?
Für $rootScope
und $scope
sollten Sie Y031 lesen.
IMHO gibt es keinen Grund, sie zu injizieren, außer wenn eine Drittanbieterbibliothek, die Sie verwenden müssen , sie benötigt, um mit Ereignissen zu kommunizieren. Beachten Sie, dass es in Angular keine Bereiche mehr gibt. Wenn Sie also Ihre technischen Schulden bewältigen möchten, müssen Sie in Ihren Projekten die Konsistenz zwischen AngularJS und Angular wahren, um eine zukünftige Migration zu ermöglichen, wenn AngularJS veraltet ist.
Bei Veranstaltungen sollten Sie diese Diskussion lesen.
Okay, ich merke es.
Vielen Dank.
@amiceli Eine nette Alternative ist ng-annotate , wodurch lange $inject-Arrays überflüssig werden :
/* <strong i="8">@ngInject</strong> */
function MainController($scope, $q, Api, segments, ResourceService, AdminService, SweetAlertService, UsersCsvService, UsersSearchService, CriteriaService, $rootScope) {
// code here
}
@bampakoa danke
@MarcLoupias Eine andere Frage ohne $scope
, wie man ein Eigenschaftsänderungsereignis beobachtet? Gefällt mir $watch
Lesen Sie diese Diskussion . IMHO, $watch
sollte möglichst vermieden werden. Verwenden Sie stattdessen ngChange
.
Hilfreichster Kommentar
Lesen Sie diese Diskussion . IMHO,
$watch
sollte möglichst vermieden werden. Verwenden Sie stattdessenngChange
.