2013-05-12 10 views
30

私は新しく、私はどのように角度の間でコントローラ間で変数を共有できるのだろうかと思っています。angular.jsのコントローラ間で変数を共有する

function MainCntl($scope) { 
    ---code 
} 

function SearchCtrl($scope, $http) { 
    $scope.url = 'http://10.0.0.13:9000/processAdHoc'; 
    $scope.errorM = "No results";  
    $scope.search = function() { 

     $http.post($scope.url, { "data" : $scope.keywords}). 
     success(function(data, status) { 
      $scope.status = status; 
      $scope.data = data; 
      $scope.result = data; 
      alert('yes'); 
     }) 
     . 
     error(function(data, status) { 
      $scope.data = data || "Request failed"; 
      $scope.status = status; 
      alert('no'); 
      $scope.result = "failed"; 
     }); 
    }; 
} 

Index.htmlとは

<body ng-controller="MainCntl" > 
---code 
<div ng-controller="SearchCtrl"> 
    <form class="well form-search"> 
    <div class="ui-widget"> 
      <label for="tags"></label> 
      <a ng-click="search()"><input type="image" src="../../images/search1.png" class="searchbox_submit" /></a> 
      <input ng-model="keywords" placeholder="Shadow Search" id="tags" class="input-medium search-query rounded" /> 
    </div> 
    </form> 
</div> 
---code 
<p ng-model="result"> 
    {{result}} 
</p> 
</body> 

すべては、私がデータを送信し、応答を受信して​​いアヤックスでうまく動作:Main.jsで

- 私は、次のスクリプトを使用しています私の質問は以下の通りです:

SearchCtrl関数では、私は$ scope.resultという変数を持っています。これについては、後でIndex.htmlを参照してください。その変数を含むhtmlコードをSearchCtrlコントローラに挿入すると正常に動作しますが、MainCtrlコントローラにあれば動作しません。どのようにしてコントローラ間でこの変数を共有できますか?

おかげで先に

答えて

70

サービスを使用して、両方のコントローラにそれを注入し、あなたのスコープは、サービス変数にvarsの参照してください。

例:テンプレートで

angular.module("yourAppName", []).factory("myService", function(){ 

    return {sharedObject: {data: null } } 

}); 

function MainCtrl($scope, myService) { 
    $scope.myVar = myService.sharedObject; 
} 

function SearchCtrl($scope, $http, myService) { 
    $scope.myVar = myService.sharedObject; 
} 

は行います

{{myVar.data}} 

See an exampleを使用すると、内部オブジェクトにそれを置く理由は、あなたを維持するためにある角度v1.1.5デベロッパーに

を使用しますあなたが "sharedObject"なしでそれを保持し、そのオブジェクトを変更すると、バインディングは古い参照を指しています。 ndはテンプレートに何も表示しません。

+0

こんにちはShaiRez、クイックアンサーとサンプルのおかげで、悲しいことにそれはまだ動作していない...おそらく私は正しく実装されていません。この例で提供したすべてを追加し、テンプレートを{{myVar.data}}に変更しました。 2つの質問が発生します。テンプレートビューも変更しないでください。myVarをajax呼び出しの成功/エラー関数に追加してください。おかげでもう一度、Gidon – Gidon

+1

もう少し読んだ後、私は$ rootScopeでこれを行う簡単な方法を見つけました...とにかくあなたの時間と歓声のmeetupsのおかげで、私は次のものを作るしようとします:) – Gidon

+0

@ShaiRez認証を処理するための好ましいモデルですか?サービスで認証し(まだログインしていない場合)、必要なすべてのコントローラにユーザモデルを返しますか? – turbo2oh

関連する問題