2017-02-08 19 views
1

私はAngularJsの新しい新機能です。私のコントローラでは、条件に応じて動的に値を割り当てたい変数$rootScopeがあります。私は複数を適用することにより、またはこれを行うことができる条件を切り替えた場合、ことを知っているangularjsで動力学的に変数名を作成する方法は?

controller(){ 

$rootScope.tab1; 
$rootScope.tab2; 
$rootScope.tab3; 
$rootScope.tab3; 
$rootScope.tab4; 

$scope.changeVal("tab2"); 

$scope.changeVal=function(tabname){ 
    vm.tabs=['tab1','tab2','tab3','tab4','tab5']; 
    angular.forEach(vm.tabs, function(val) { 
     if(tabname===val) 
     { 
      //here $rootScope.tab2 value should be changed 
      //something like bellow 
      $rootScope.{{tabname}}="myValue"; 
     } 
     else{ 
     $rootScope.$eval(val)=""; 
     } 
    }); 

} 

}

:後 は私のコントローラのコードです。しかし、いくつかの最適化されたソリューションを見つける。 すべてのヘルプが妥協されます。あらかじめThanx。

+1

あなたの質問には次のようなコメントがありますが、なぜ '$ rootScope'を使うのですか?ローカルの '$ scope'を使っていませんか?可能であれば、ダイジェストサイクルを制限してみてください。アプリケーション変数を格納する別の方法は、 'services'(シングルトン)を使うことです。 –

答えて

0

ルートスコープはちょうど別のjavascriptオブジェクトなので、あなたが

$rootScope[tabname]="myValue"; 

を(それはそれは$rootScopeに直接大量のデータを詰め込むために、一般的に素晴らしいアイデアではありません、言ったんだろう、それは使用しての角度と同等です

+0

私はあなたに同意します。実際にはこれはサンプルコードなので、私はアプリケーション全体でこれらの変数を使用しなければならないので、グローバル変数です。 –

+0

アプリケーション全体でデータを共有する必要がある場合は、ルートスコープではなくサービスの使用を検討してください。 –

+0

はい。しかし、しばらくの間あなたの解決策は機能していません。私はその表現を配列と考えると思います。 –

1

は、なぜあなたはちょうど

$rootScope[tabname]="myValue"; 

$rootScopeを使用していないすべてのグローバル変数が...)のようなものですのangularには、プロパティを追加して、plain old javascriptのようなプロパティにアクセスできます。

関連する問題