2017-03-23 7 views
1

ui-Routerを使用してAngularjsのあるビューから別のビューにいくつかの値を渡したいとします。
$ rootScopeを使用してデータを保存したり、新しいサービスを作成したりすることは望ましくありません(データの小さなビットを渡すビューが多いため、新しいjsfileを数行作成するのは楽しいことではありません)。私が何をしたいの超縮小さ例は次のとおりです。ビュー1ビュー2の
$scope.goodFood = 10 $scope.badFood = 2あるルートビューから別のルートビューにデータを渡す

コントローラ
$scope.results = 10 - 2 (from view 1's scope)

コントローラー行うための任意の簡単な方法はありますこれらの種類の小さな操作ですか?

+0

$ stateParams https://github.com/angular-ui/ui-router/wiki/URL-Routing – yBrodsky

+0

stateparams状態の間で変更するためであるが、ここで私は、複数のビュー(テンプレート&コントローラ)を含む単一の状態の内側によ。 – Jamie

+0

paramを子ビューに渡すのはなぜですか? – yBrodsky

答えて

1

$ rootScopeを使用してデータを保存したり、新しいサービスを作成したりしたくありません。いくつかの行のための新しいjsfileを作成するコードは楽しいものではありません)

データの新しいビットのための新しいサービスを作成する必要はありません。単にオブジェクトと値のサービスを作成します。必要に応じて

app.value("viewData", {}); 

を次に単に新しいプロパティを追加します。

app.controller("viewCtrl", function(viewData) { 
    viewData.newProp = "new info"; 
    console.log(viewData.oldProp); 
}); 

を価値サービスはシングルトンであるため、オブジェクトの内容への変更は、ビューの変更後も存続します。

0

最も簡単な方法は、ルートまたはクエリ文字列を使用してすべてのデータを$ routeParamsに直接格納することです。

routeUrl: /foods/:quality/:stars 

、あなたのコントローラにあなたが

$routeParams.quality - $routeParams.stars 
1

にアクセスすることができ、あなたが従うことを望んでいたアプローチを指定しているので、次の

$stateProvider 
    .state('view2', { 
     url: "/view2/:param1/:param2", 
     templateUrl: 'view2.html', 
     controller: function ($stateParams) { 
      console.log($state.params.param1+"-"+$state.params.param2); 
     } 
    }); 

と今まであなたからを作成する必要がありますお電話したい

$state.go('view2',{param1:'10', param2:'2'}); 

しかし、一般的には、これらの値をサービス内に保存するか、格納された場所に保存することをお勧めします。アプリケーションが成長するにつれ、計算にはもっと多くの属性を使用する必要があります

+1

パラメータはURLには表示されません。[状態URLでパラメータを指定せずにパラメータを使用する](https://github.com/angular-ui/ui-router/wiki/URL-Routing#using-parameters-without-specifying -them-in-state-urls) – georgeawg

関連する問題