优化 angular 重复代码

optimise angular duplicate code

如何优化这里的重复代码

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;
                });
            });
        };
    });

您可以创建 $scope.findAll 方法,该方法将创建 LogsService.findAll() 的 ajax,这样您就可以在 elsewhere.Optimize 版本中多次使用此功能会是。

代码

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
    });

这里有一个建议:

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;
                });
            });
        };
    });

取决于您的目标。如果您正在寻找代码清晰度,潜在的重构可能看起来像这样。

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();

    }
});