我試圖用一些對谷歌,風格指南站點定義angulars最佳實踐:https://google-styleguide.googlecode.com/svn/trunk/angularjs-google-style.htmlAngularJS最佳實踐 - 風格指南
但此刻我的一些問題苦苦掙扎。在我使用這個樣式指南之前,我有$scope
變量可用於在變量上執行$watch
。
app.controller('myController',['$scope', function($scope) {
$scope.$watch('myVariable', function(val) {
alert("I'm changed");
});
}]);
現在用我的新方法,我不知道如何處理這個?我還應該注入$scope
?因爲我不使用$watch
時不需要注入$scope
。
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]);
styleguide還建議使用原型。但是如果我不得不注入服務呢?在原型中使用服務的最佳方法是什麼?
function myController(MyService) {
var vm = this;
vm.myService = MyService;
}
myController.prototype.callService = function() {
var vm = this;
vm.myService.doSomething();
}
這是正確的嗎?或者我錯過了什麼,有沒有一個地方可以找到更多關於這種角度編程風格的信息?
在我看來,它感覺更像自然的JavaScript,我想用這種方式來組織我的AngularJS應用程序。
在此先感謝
更新
對於 '服務' 的問題,我想的東西如下:
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();
}
但是,這感覺不對IMO ..
偉大的問題!對於你關於$ watch的問題,我想知道風格指南是否試圖避免在控制器中調用$ watch,因爲他們聲明「控制器是類」。既然你知道數據在控制器中的變化,當控制器內部調用一個特定的方法時,是否會執行「$ watch」? – Pete
其實我想對一個指令內部變化的變量執行'$ watch'。我認爲在方法內改變一個變量時不會有問題。我們稱之爲範圍,無論如何都會得到更新。 – Dieterg
在指令中,您可以從鏈接,編譯和控制器訪問範圍,因此在這些情況下可以訪問$ watch。 – Pete