搜尋

首頁  >  問答  >  主體

angular.js - angular 將$scope傳入service

app.contronller('xxx', ['$scope', 'service', function($scope, service) {
    $scope.xxx = 'xxxx';

    service.say($scope);
}]);

app.service('xxx', [function() {
    this.say = function($scope) {
    }
}]);

現在維護的程式碼裡好多這樣的情形,這是不是錯誤的用法?感覺用起來很爽,但是程式碼好混亂

我想大声告诉你我想大声告诉你2743 天前684

全部回覆(4)我來回復

  • ringa_lee

    ringa_lee2017-05-15 16:52:23

    這明顯是偷懶的做法,造成service的方法的含義非常模糊,你傳$scope進去,真正用哪個參數完全體現不出來。
    而且造成service方法對$scope不必要的依賴。

    回覆
    0
  • 黄舟

    黄舟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 之類的全域變量,因為不需要透過其他元件傳遞過來,自身就可以透過注入獲取得的到,是可以使用的。

    回覆
    0
  • 某草草

    某草草2017-05-15 16:52:23

    去看我的部落格 用回呼參數傳遞

    回覆
    0
  • 高洛峰

    高洛峰2017-05-15 16:52:23

    其實我測試的時候發現如果你在服務中返回值給控制器中的$scope ,閉包貌似不起作用,然而傳$scope進去直接在服務中更新控制器中的$scope, 這樣很好用

    回覆
    0
  • 取消回覆