Angularjs-服务不';t在控制器之间存储数据

Angularjs-服务不';t在控制器之间存储数据,angularjs,Angularjs,我的angular应用程序有一个问题,它是一个工厂,用于在控制器之间存储数据。在一个视图中,我将对象推送到一个列表中,我确信它会继续,但每当我转到另一个视图(使用新控制器)时,列表都是空的 services.js 'use strict'; var services = angular.module('services', ['ngResource']); services.factory('participants', function () { var participants

我的angular应用程序有一个问题,它是一个工厂,用于在控制器之间存储数据。在一个视图中,我将对象推送到一个列表中,我确信它会继续,但每当我转到另一个视图(使用新控制器)时,列表都是空的

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;
                                 }]);
“严格使用”;
var cont=angular.module('controllers',['services']);
cont.controller('lottery1Ctrl'、['$scope'、'participants'、'$location'、'$log',
功能($scope,participants,$location){
$scope.content=“[等待文件]”;
this.showFileContent=函数(fileContent){
$scope.$apply((功能(控制器)){
返回函数(){
controller.content=fileContent;
$scope.csvToJson(文件内容);
};
})(本);;
};
$scope.checkParticipants=函数(){
if(participants.list.length==0){
警报(“Wgraj plik CSV”)
}
其他的
$location.path('/lotket/2');
};
$scope.csvToJson=函数(文本){
变量行=text.split(“\n”);
对于(变量i=1;i
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>
参与者编号:{{getTotalParticipants()}

{{{participant.name}:{{{participant.sirName}:{{{participant.email}}:{{{participant.answer}

输出只显示::,每当我尝试获取列表的长度值时,就会出现一个错误“无法读取未定义的属性'length'”


提前谢谢

我看不到您的参与者列表被传递到$scope对象的任何地方,您可以在html中绑定它或从ng repeat引用它。虽然我无法对您的整个程序进行评论,但在我看来,您需要在控制器中进行声明,例如:

    $scope.participants = [];
然后您应该将参与者添加到该数组中。尝试将其放入您的代码中,查看它是否在您的网页上显示虚拟值,如果是这样,您可能需要检查您的函数,以便在控制器中填充数组:

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

这加上我迭代列表的方式的细微变化,效果非常好(参与者而不是参与者.list)。谢谢