0

私のAngularアプリケーションには、アプリケーションのさまざまなコンポーネントで使用されるConfiguration構造を格納するサービスがあります。AngularJs分離スコープのサービス

myApp.factory("guiConfigService", ['$http', function($http) { 
    var guiConfig = {}; 
    var self = { 
     setGuiConfig: function (callback) { 
      guiConfig = {"Functions" : { 
      "FunctionIds" : [ 
       "3", 
       "5", 
       "10", 
       "last_entry" 
      ] 
      }}; 
      if (undefined !== callback) { 
      callback(guiConfig); 
      } 
     }, 
     getGuiConfig: function (buzzword, callback) { 
      callback(guiConfig[buzzword]); 
     } 
    } 
    return self; 
}]); 

私の問題:

.runguiConfigServiceが機能setGuiConfigによって.jsonファイルから設定を読み込み、機能getGuiConfigにより、特定のコンポーネントのデータを返すことができることを-phase私のコンポーネントのコントローラーは、私のサービスのgetGuiConfig機能から戻ってくるものを操作できるようにしたいとします。私は属性FunctionIdsの最後の項目を削除したいとします。この操作は私のコントローラのオブジェクトに影響するだけでなく、私のサービスのguiConfig -Objectを操作します。

たとえば、this JsFiddleを参照してください。私はすでに試した何

  • まず私はこの問題は私がコールバック関数を呼び出して直接オブジェクトを返さないで、と思ったが、私が試した、どちらか動作するようには思えません。
  • 私のサービスのguiConfigオブジェクトのコピーを送信することはJSON.parse(JSON.stringify(guiConfig[buzzword]))で動作していますが、私には正しい方法がないように見えます。

実際のオブジェクトへの参照なしに、サービス中のオブジェクトからデータを返す良い方法はありますか?

+2

コールバック関数でangular.copy()を使用できます。 – Dev

+1

コントローラ内のconfigsの通常のコードは〜: config = angular.extend(ctrl.config || {}、service.getNewGuiConfig()); –

答えて

1

すべてのサービスは、角度がシングルであるため、コントローラに設定データのコピーを作成し、それに応じて変更することができます。 私によれば、あなたのアプリケーション設定を保存し、angular.copy()を使ってそれらを操作したいときは常に設定のコピーを作成するために、定数サービスを使うべきです。

function MyCtrl($scope, guiConfigService) { 
    var configData; 
    $scope.getNewGuiConfig = function() { 
     guiConfigService.getGuiConfig('Functions', function(data) { 
     configData = angular.copy(data); 
     configData.FunctionIds.splice(-1); 
    }); 
} 
} 
+0

サービスは複数のコンポーネントで使用されているので、サービスよりもコピーを作成する方が合理的です。そうでなければ、ありがとう! – LocalHorst

関連する問題