app.contronller('xxx', ['$scope', 'service', function($scope, service) {
$scope.xxx = 'xxxx';
service.say($scope);
}]);
app.service('xxx', [function() {
this.say = function($scope) {
}
}]);
現在維護的程式碼裡好多這樣的情形,這是不是錯誤的用法?感覺用起來很爽,但是程式碼好混亂
ringa_lee2017-05-15 16:52:23
這明顯是偷懶的做法,造成service的方法的含義非常模糊,你傳$scope進去,真正用哪個參數完全體現不出來。
而且造成service方法對$scope不必要的依賴。
黄舟2017-05-15 16:52:23
嚴格來說,service裡面不應該處理非全域性的狀態值,尤其是修改。這裡就是$scope。換個意思是說,這裡service類似接口,應該明確函數的參數列表,而不是籠統的參數。
如
app.contronller('xxx', ['$scope', 'service', function($scope, service) {
$scope.xxx = 'xxxx';
service.say($scope.xxx);
}]);
app.service('xxx', [function() {
this.say = function(word) {
}}]);
當然類似$location,$rootScope 之類的全域變量,因為不需要透過其他元件傳遞過來,自身就可以透過注入獲取得的到,是可以使用的。
高洛峰2017-05-15 16:52:23
其實我測試的時候發現如果你在服務中返回值給控制器中的$scope ,閉包貌似不起作用,然而傳$scope進去直接在服務中更新控制器中的$scope, 這樣很好用