Ich versuche, einige von winkelförmigen Stangen Best Practices auf der Website Google-Styleguide definiert zu verwenden: https://google-styleguide.googlecode.com/svn/trunk/angularjs-google-style.htmlAngularJS Best Practices - Styleguide
Aber im Moment habe ich mit einigen Fragen bin zu kämpfen. Bevor ich diesen Styleguide verwendet habe, hatte ich die Variable $scope
verfügbar, um zum Beispiel eine $watch
auf einer Variablen zu machen.
app.controller('myController',['$scope', function($scope) {
$scope.$watch('myVariable', function(val) {
alert("I'm changed");
});
}]);
Jetzt mit meinem neuen Ansatz weiß ich nicht, wie man damit umgeht? Sollte ich noch spritzen $scope
? Weil ich nicht $scope
spritzen muss, wenn ich $watch
nicht verwende.
function myController($scope) {
var vm = this;
vm.myVariable = "aVariable";
vm.$watch('vm.myVariable', function(val) {
// error because $watch is undefined
});
//$scope.$watch - works
}
app.controller('myController',['$scope', myController]);
Der Styleguide empfiehlt auch, Prototypen zu verwenden. Aber was, wenn ich eine Dienstleistung einspritzen müsste? Was ist der beste Ansatz, um einen Service in Ihrem Prototyp zu verwenden?
function myController(MyService) {
var vm = this;
vm.myService = MyService;
}
myController.prototype.callService = function() {
var vm = this;
vm.myService.doSomething();
}
Ist das korrekt? Oder vermisse ich etwas, gibt es einen Ort, wo ich mehr Informationen über diese Art der eckigen Programmierung finden kann?
Meiner Meinung nach fühlt es sich mehr wie natürliches Javascript an und ich möchte diese Art der Organisation meiner AngularJS-Apps verwenden.
Vielen Dank im Voraus
aktualisieren
Für den 'Dienst' Problem, das ich war etwas zu denken wie folgt:
function MyBaseController(AService, BService, CService) {
this.aService = AService;
this.bService = BService;
this.cService = CService;
}
function myController() {
var vm = this;
MyBaseController.apply(vm, arguments);
}
myController.prototype.doSomething() {
var vm = this;
this.aService.somethingElse();
}
Aber dieses Recht imo nicht fühlen ..
Große Frage! Für Ihre Frage zu der $ Uhr frage ich mich, ob der Styleguide versucht, $ watch in einem Controller zu nennen, da sie "Controller sind Klassen" angeben. Da Sie wissen, wann sich Daten innerhalb eines Controllers ändern, könnte es sein, dass Ihre "$ watch" ausgeführt wird, wenn eine bestimmte Methode innerhalb des Controllers aufgerufen wird? – Pete
Eigentlich möchte ich eine '$ watch' für eine Variable machen, die innerhalb einer Direktive geändert wird. Ich denke, es würde kein Problem geben, wenn Sie eine Variable in einer Methode ändern. Der Bereich, nennen wir es, wird sowieso aktualisiert. – Dieterg
In einer Direktive können Sie über Link, Compile und Controller auf den Bereich zugreifen, sodass in diesen Fällen auf $ watch zugegriffen werden kann. – Pete