Angular-styleguide: Der beste Weg für einen langen Controller $inject

Erstellt am 17. Mai 2017  ·  7Kommentare  ·  Quelle: johnpapa/angular-styleguide

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.

Hilfreichster Kommentar

Lesen Sie diese Diskussion . IMHO, $watch sollte möglichst vermieden werden. Verwenden Sie stattdessen ngChange .

Alle 7 Kommentare

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 .

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen