2015-04-30 75 views
1

我怎么能在这里优化的角度重复代码

angular.module('myApp') 
    .controller('LogsController', function ($scope, LogsService) { 
     $scope.updatingLogs = true; 
     $scope.loggers = {}; 

     LogsService.findAll().$promise.then(function(data) { 
      $scope.loggers = data; 
      $scope.updatingLogs = false; 
     }); 

     $scope.changeLevel = function (name, level) { 
      LogsService.changeLevel({name: name, level: level}, function() { 
       $scope.updatingLogs = true; 
       LogsService.findAll().$promise.then(function(data) { 
        $scope.loggers = data; 
        $scope.updatingLogs = false; 
       }); 
      }); 
     }; 
    }); 

回答

0

优化重复的代码你可以做创建$scope.findAll方法,这将使的LogsService.findAll()一个Ajax,这样你可以利用这个功能,而从其他地方多次做。优化版本会。

代码

angular.module('myApp') 
    .controller('LogsController', function($scope, LogsService) { 
     $scope.updatingLogs = true; 
     $scope.loggers = {}; 

     $scope.findAll = function() { 
      LogsService.findAll().$promise.then(function(data) { 
       $scope.loggers = data; 
       $scope.updatingLogs = false; 
      }); 
     } 

     $scope.changeLevel = function(name, level) { 
      LogsService.changeLevel({ 
       name: name, 
       level: level 
      }, function() { 
       $scope.updatingLogs = true; 
       $scope.findAll(); 
      }); 
     }; 

     $scope.findAll(); //init 
    }); 
+0

这真的很接近我正要说的话。区别在于findAll()不在$ scope中,除非视图需要直接调用它。 – coblr

+0

@fractalspawn ya..i在$ scope中添加了它,因为无论哪种方式,我们都可以使用'ng-init'来初始化它,这会使得单元测试更有意义 –

+0

如果它确实帮助了你,它就会变成upvote ..谢谢:) –

1

这里有一个建议:

angular.module('myApp') 
    .controller('LogsController', function ($scope, LogsService) { 
     $scope.updatingLogs; 
     $scope.loggers = LogsService.findAll(); 

     $scope.changeLevel = function (name, level) { 
      $scope.updatingLogs = LogsService.changeLevel({name: name, level: level}, function() { 
       LogsService.findAll().$promise.then(function(data) { 
        $scope.loggers = data; 
        $scope.updatingLogs = null; 
       }); 
      }); 
     }; 
    }); 
0

取决于你达到什么。如果你正在寻找代码清晰度,潜在的重构可能看起来像这样。

angular.module('myApp') 
    .controller('LogsController', function ($scope, LogsService) { 

    activate(); 

    $scope.changeLevel = function (name, level) { 
     LogsService.changeLevel({name: name, level: level}, changelevelHandler); 
    }; 

    function changeLevelHandler() { 
     $scope.updatingLogs = true; 
     getLogs(); 
    } 

    function getLogs() { 
     LogsService.findAll().$promise.then(function(data) {updateLoggers(data);}); 
    } 

    function updateLoggers(data) { 
     $scope.loggers = data; 
     $scope.updatingLogs = false; 
    } 

    function activate() { 
     $scope.updatingLogs = true; 
     $scope.loggers = {}; 
     getLogs(); 

    } 
});