2017-09-09 6 views
0

こんにちは、あるコントローラから別のコントローラにデータを渡そうとしていますが、データがUIのもう一方の端に表示されません。コントローラ間でデータが流れない

これは私のサービスコードである: -

app.factory('ServiceF', function($rootScope) { 

var service = {}; 
    service.data = false; 
    service.sendData = function(data){ 
     this.data = data; 
     $rootScope.$broadcast('data_shared'); 
    }; 
    service.getData = function(){ 
    return this.data; 
    }; 
    return service; 
}); 

コントローラ1つのコード: -

app.controller('Ctrlone', ["$scope", "ServiceF", function ($scope, ServiceF) { 

$scope.Info= {}; 
     $scope.ser= function(){ 
      ServiceF.sendData($scope.Info); 
      console.log($scope.Info); 
      }; 
    }]);  

$scope.Infoデータがどの他のソースから首尾よくここに来ています私は投稿していません。しかし、それは来ている。

コントローラー2: - 私は情報を表示したい

app.controller('Ctrltwo', ["$scope" ,"ServiceF", 
function($scope , ServiceF) { 
$scope.Info= ''; 
       $scope.$on('data_shared',function(){ 
        var good = ServiceF.getData();  
      $scope.Info = good; 
     }); 
}]); 

UI: - 第一UIから

<div class="col-sm-8"> 
      <h1 class="mainTitle">Ok Start </h1> 
      <h2>{{good}}</h2> 

</div> 

ボタンのクリック機能: -

<label class="cardlabel" style="width:11vw" ui-sref="uitwo" ng-click="ser()">Send</label> 

今どこが間違っていますか? 2番目のUIに情報が表示されません。また、データがサービスに渡っているかどうかを確認するにはどうすればよいですか?

+0

適切かつ一貫性のある方法でインデントした場合、および命名規則を尊重した場合は、コード内のバグを見つけ出す(そして回避する)方がずっと簡単です。変数の半分は小文字で始まり、残りの半分は大文字で始まります。あなたはどちらの慣習をどのように使っているのか、どのように覚えています常に同じコンベンションを使用してみませんか? –

+0

@JBNizetこれをより良い形式で改善します。ありがとうございます。私は覚えている。 – WhoAmI

答えて

0

範囲内にgoodという名前の属性はありません。したがって{{ good }}は常に空です。

スコープ属性の名前はInfoです。だからあなたは{{ Info }}が欲しいです。

+0

まだデータが表示されていません – WhoAmI

+0

リンクをクリックすると、2番目のコントローラが既に作成され、そのビューがページに表示されていますか?そうでない場合は、最初のコントローラがイベントを発行したときに、イベントをまだ聞いていないからです。デバッガを使用してコード内にconsole.log()を追加します。まだ問題が残っている場合は、問題を再現した完全な最小限の例を投稿してください。 –

+0

はい2番目のコントローラーはすでに作成されていますが、2番目のコントローラーにリンクされている他のページに表示されています。 – WhoAmI

関連する問題