2016-05-04 5 views
2

グローバル変数(実際のグローバル変数ではなく、$rootScope)を持つアプリがあります。私は{{ }}式を使ってビューにそれを印刷する必要があります。現在のコントローラの変数$scopeをthisグローバル変数にどのように関連付けることができますか?このグローバル変数の最新の値が常に画面に表示されるようにします。印刷角度で表示するグローバル変数

EDIT:コード:

app.controller('placesCtrl', ['$scope','$rootScope',function($scope, $rootScope){ 
    $scope.place = place; 
}]); 

var autocomplete,map,place = {}; 
place.name = "asdf"; 
function initAutocomplete() { 
    ... 

    //Initialize google maps autocomplete 
    //Add event listener 

    autocomplete.addListener('place_changed', function() { 

    //update place    
     place = autocomplete.getPlace(); 
     console.log(place); 

     if (!place.geometry) { 
      window.alert("No such city found!"); 
      return; 
     } 

     }); 
} 

答えて

5

myGlobalがオブジェクトである場合は、それへの単純な参照が十分である:今

$rootScope.myGlobal = myGlobal; 

にそれは、このような文字列や番号などの生の値だ場合には(またはあなたのオブジェクトの参照を変更する場合)、それにクロージャを使用することができます:

$rootScope.getMyGlobal = function() { return myGlobal; } 

そして、その後、あなたのHTMLの書き込みに:あなたは$rootScopeからデータを取得するために、子スコープで機能を設定する必要がありますので、テンプレートは常に、$rootScopeの子スコープにバインドする必要があります

<div>{{getMyGlobal()}}</div> 
+0

はまであることに注意すべき新しいダイジェストサイクルが実行されると、getMyGlobal()は呼び出されないので、式はそれまで更新されません。したがって、グローバル変数がいくつかの角度プロセスの外で更新された場合、次のサイクルまで画面上で更新されません。 –

+0

@PatrickEvans右、それを指摘してくれてありがとう。したがって、変数を更新するコードがAngularライフサイクル内にない場合(例えば、一部の非同期要求など)、その前後に '$ scope。$ apply'を呼び出すことを忘れないでください。 – floribon

+0

もし '$ scope'にアクセスできるのであれば、実際にはそれを更新するべきであり、いくつかのグローバル変数ではありません。私の警告は、[this fiddle](https://jsfiddle.net/jhx8Lgqm/)のようにAngular以外の変数を完全に更新した場合、setTimeoutは変数を変更しますが、 '$ scope.apply( ) 'ので、ランダムなダイジェストが起こるまでビューは更新されません。 –

1

//controller 
$scope.getData = function(){ 
    return gloablData; 
} 

//template 
<div>{{getData()}}</div> 
+0

**は、 $ rootScope'ではなく実際のグローバル変数 – ayushgp

+0

は 'getData'のグローバルデータを返します – MarkoCen

関連する問題