2016-05-27 11 views
1

コントローラ間のデータを格納するためのサービス、ファクトリです。 1つのビューでは、オブジェクトをリストにプッシュしていますが、それが進行すると確信していますが、別のビュー(新しいコントローラで)を表示するたびにリストは空です。Angularjs - サービスはコントローラ間でデータを格納しません。

services.js

'use strict'; 

var services = angular.module('services', ['ngResource']); 

services.factory('participants', function() { 
    var participants = {}; 

    participants.list = []; 

    participants.add = function(name, sirName, email, answer){ 
     participants.list.push({name: name, sirName: sirName, email: email, answer: answer}); 
    }; 

    return participants; 
}); 

controllers.js

'use strict'; 

    var cont = angular.module('controllers', ['services']); 


    cont.controller('lottery1Ctrl', ['$scope', 'participants', '$location', '$log', 
            function ($scope, participants, $location) { 
             $scope.content = "[Waiting for File]"; 
             this.showFileContent = function(fileContent){ 
              $scope.$apply((function(controller){ 
               return function(){ 
                controller.content = fileContent; 
                $scope.csvToJson(fileContent); 
               }; 
              })(this)); 
             }; 

             $scope.checkParticipants = function() { 
              if(participants.list.length == 0){ 
               alert("Wgraj plik CSV") 
              } 
              else 
               $location.path('/lottery/2'); 
             }; 

             $scope.csvToJson = function (text) { 
              var lines = text.split("\n"); 

              for (var i = 1; i < lines.length; i++) { 
               var currentLine = lines[i].split(","); 

               var answer = currentLine[0]; 
               var name = currentLine[1]; 
               var sirName = currentLine[2]; 
               var email = currentLine[3]; 
               participants.add(name, sirName, email, answer); 
              } 
             }; 
            }]); 

    cont.controller('lottery2Ctrl', ['$scope', 'participants', '$log', 
           function ($scope, $log, participants) { 
            $scope.getTotalParticipants = function() { 
             $log.log(participants.list.length); 
             return participants.list.length; 
            }; 
           }]); 
cont.controller('ListCtrl', ['$scope', 'participants', 
           function (participants) { 
            var self = this; 
            self.participants = participants.list; 
           }]); 

login2.html

<h3>Participants number: {{getTotalParticipants()}}</h3> 
     <div ng-controller="ListCtrl as list"> 
      <p ng-repeat="participant in participants.list">{{ participant.name }}: {{ participant.sirName }}: {{ participant.email }}: {{ participant.answer }}</p> 
     </div> 

出力:::しか示していない、と私は長さの値を取得しようとするたびにリストの「エラーが発生する」「未定義のプロパティ 'length'を読み取ることができません」

ありがとうございます!

答えて

1

参加者のリストが$ scopeオブジェクトに渡される場所は表示されません。これは、htmlでバインドしたり、ng-repeatから参照することができます。

$scope.participants = []; 

と、あなたはその配列へのあなたの参加者を追加する必要があります:私はあなたの全体のプログラムにコメントすることはできませんが、あなたのようなコントローラーで宣言をする必要があるように私には思えます。その配列は、お使いのコントローラに移入されますので、あなたはおそらくあなたの機能をtweekする必要がある場合は、あなたのコードでこれを入れてみてください、それはあなたのWebページ上のダミーの値を表示するかどうかを確認:方法で

$scope.participants = [{name:'Test1'},{name:'Test2'}]; 
+1

このプラス微妙な変更私は私のリストを繰り返し、参加者のリストではなく参加者となりました。ありがとう! –

関連する問題