Ich versuche, Best Practices mit einer AngularJs 1.5 App zu verabschieden. Bereits folgende Todd Motto's und John Papa's Stil führtWie wird empfohlen, eine gekapselte Direktive und Routing in einer AngularJS-App zu verwenden?
Die Sache ist die: meine app hat Routen mit ngRoute. Also, das:
function RoutingConfig($routeProvider) {
$routeProvider
.when('/route1', {
controller: 'Ctrl1 as vm',
templateUrl: 'partials/route1.html',
resolve: { myCoolService: myCoolService } // to abbreviate
})
.when('/route2', {
controller: 'Ctrl2 as vm',
templateUrl: 'partials/route2.html'
})
.otherwise({redirectTo: '/route1'}):
}
angular
.module('myApp', ['ngRoute'])
.config(RoutingConfig);
Ok. So weit, ist es gut. Jetzt
, lassen Sie uns sagen, dass in meinem Weg nach Angular 2, ich die kapseln alles in einer Richtlinie Ansatz verabschieden wollen. Auf diese Weise erstelle ich etwas wie Web-Komponenten mit AngularJS 1.5.
Wenn ich die richtigen Praktiken folgende bin, konnte ich eine Richtlinie für meine route1 erstellen und direkt einen Controller für diese Richtlinie definieren:
function MyCoolDirective() {
var directiveDefObj = {
controller: Ctrl1,
controllerAs: 'vm',
scope: {
data: "=",
},
bindToController: true, // isolated scope
link: linkFnc // just declared to abbreviate
};
return directiveDefObj;
}
angular
.module('myApp')
.directive('MyCoolDirective', MyCoolDirective);
So wo soll ich die Controller erklären? In der Routing-Konfiguration? In jeder Richtlinie? Klingt ein bisschen redundandt für mich.
gibt es hier tatsächlich zwei separate Controller; eine für die Route und alles in ihrer Vorlage, die andere für die Direktive und alles in ihrer Vorlage. Wenn Sie jedoch beabsichtigen, dass die Routenvorlage nur Anweisungen enthält und keine eigene Logik verwendet, ist es nicht erforderlich, einen Controller bereitzustellen. In der Praxis werden Sie jedoch wahrscheinlich beides benötigen, insbesondere wenn Sie mehrere Direktiven planen, die Informationen untereinander austauschen. – Claies
Sie brauchen keine Route Controller mehr. Sie können einfach die Vorlage für Ihre Route eine Direktive machen und all Ihre Controllerlogik in die Direktive einfügen. z.B. '.when ('/ route1', {template: ' my-cool-directive>'})' –
rob
Ja, das ist meine Idee: verschiebe die Komplexität in Direktiven und habe keine Routing-Controller, wenn möglich. Um die Kommunikation zwischen Direktiven (typisches Beispiel der äußeren Direktive für einen Container und innere Direktive für jedes der enthaltenen Elemente) zu handhaben, konnte ich nicht einfach 'require' in meinen inneren Direktiven verwenden? – jorgeas80