在控制器(服务)之间传递数据

时间:2014-01-11 10:08:59

标签: angularjs service pass-data

我正在创建一个测验,我想添加用户给数组的答案(myAnswers),当测验完成后,我将用户重定向到摘要页面,在那里他可以看到正确的答案和他给出了答案。那些都是不同的控制者。我尝试过使用服务,但这没有用......

有人可以帮我解决这个问题吗?

服务

var lycheeServices = angular.module('lycheeControllers', [])

lycheeServices.service('myAnswerService', function () {
var myAnswers= [];
this.AddAnswer = function(number, a){
    myAnswers[number-1] = a;
};
this.getAnswer = function(number){
    return myAnswers[number-1];
};
});

控制器测验

lycheeControllers.controller('quizCtrl', ['$scope', '$http', 'myAnswerService',
function ($scope, $http, myAnswerService) {


$scope.checked = function (answer) {
        myAnswerService.addAnswer(number, answer.answer);
    }

控制器摘要

lycheeControllers.controller('summaryCtrl', ['$scope', '$http', 'myAnswerService', function ($scope, $http, myAnswerService) {

$scope.myAnswer = myAnswerService.getAnswer(number);
]

1 个答案:

答案 0 :(得分:0)

在您的控制器摘要中,当您使用myAnswerService.getAnswer(number);检索值时,它会返回一个新值,而您的$scope.myAnswer是值的副本

如果您的答案是值类型,那么上的任何更改都不会影响服务答案数组中的值。

如果您的答案数组包含对象(引用类型),则操作$scope.myAnswer属性将更新答案引用的同一对象的属性在服务的数组中。但如果你用另一个答案替换它,你在答案数组中的答案将不会注意到变化

我不知道你想要实现的目标,但一个合理的解决方案是将服务对象存储到范围内。像这样:

$scope.myAnswer = myAnswerService

注意:当您进行重定向时,请确保您没有执行整页刷新,因为您的数据将被完全清除。