$ http结果的集中逻辑(AngularJS 1.x)

时间:2016-05-28 00:44:32

标签: angularjs dependency-injection

我真的很喜欢Angular,但我是一个超级n00b,仍然试图围绕这些概念。

目前,我有大约9个或10个具有几乎相同代码的控制器:

$scope.saveForm = function (viewModel) {
    if ($scope.id && $scope.id > 0) {
        $http.put(appConstants.baseUrl + 'v1/SiteGroupStagings/' + $scope.id, viewModel.data)
            .then(function successCallback() {
                $scope.master = angular.copy(viewModel);
                Notification.success('Success');
            }, function errorCallback(response) {
                Notification.error('An error occurred while trying to save.<br /><br />' + response.statusText + '<br /><br />'+ response.data);
            });
    } else {
        $http.post(appConstants.baseUrl + 'v1/SiteGroupStagings', viewModel.data)
            .then(function successCallback() {
                $scope.master = angular.copy(viewModel);
                Notification.success('Success');
            }, function errorCallback(response) {
                Notification.error('An error occurred while trying to save.<br /><br />' + response.statusText + '<br /><br />'+ response.data);
            });
    }
};

因此,代码重复发生在两个地方:

  1. 这个整个方法在我的许多控制器中都是重复的(唯一不同的是http网址)
  2. 在该方法中,then函数(在$http.post / $http.put之后)完全重复
  3. 我的问题是:集中管理这些逻辑并在控制器之间共享的推荐方法是什么?

    这只是我的许多控制器中几乎重复的代码的一个示例,显然这会导致严重的可维护性问题。

    谢谢

1 个答案:

答案 0 :(得分:1)

网址是一个字符串,因此您可以有条件地设置它,并将其用于$http请求。

$scope.saveForm = function (viewModel) {
  var url = 'vi/SiteGroupStagings/' + viewModel.data;

  if ($scope.id && $scope.id > 0) {
    url = 'vi/SiteGroupStagings/' + $scope.id + viewModel.data;
  }

  $http.put(appConstants.baseUrl + url)
    .then(function successCallback() {
      $scope.master = angular.copy(viewModel);
      Notification.success('Success');
    }, function errorCallback(response) {
      Notification.error('An error occurred while trying to save.<br /><br />' + response.statusText + '<br /><br />'+ response.data);
    });
};

我最近提到的另一件事是,如果你发现自己需要跨控制器共享方法,你应该考虑制作服务或工厂。然后,您可以在注入它的任何控制器中调用它的函数。我发现这有用:http://tylermcginnis.com/angularjs-factory-vs-service-vs-provider/