2016-05-28 3 views
0

私は本当にAngularが好きですが、私はuber 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); 
      }); 
    } 
}; 

ので、コードの重複は、2つの場所で発生している:

  1. この全体の方法は、私の多くに重複しています(/$http.putの後の)then機能は正確な重複である

私の質問は、このロジックを集中化してコントローラ間で共有するための推奨方法は何ですか?

これは、私のコントローラの多くでほぼ重複しているコードの単なる一例に過ぎず、明らかにこれは大きな保守性の問題を引き起こすでしょう。

は、URLは、条件付きでそれを設定することができますので、文字列であり、そして、あなたの$http要求のためにそれを使用して、あなたに

+1

短い答えは、コントローラ間でデータやメソッドを共有するサービスを使用しています – charlietfl

答えて

1

ありがとうございます。

$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/

+0

ありがとうございました。あなたの例では、 '.put'と' .post'を別々に呼び出しているという事実を説明していません。しかしこれは、長い形式の '$ http({method: 'post'、url: ''})...構文を使用することで解決します –