0

我正在创建一个测验,我想将用户给出的答案添加到一个数组 (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);
]
4

1 回答 1

0

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

如果您的答案是值类型,则对其进行的任何更改都不会影响您的服务答案数组中的值。

如果您的 answers 数组包含对象(引用类型),那么操作 的属性$scope.myAnswer更新服务数组中的 answer 引用的同一对象的属性。但是,如果您将其替换为另一个答案,则答案数组中的答案将不会注意到更改

我不知道您要实现什么,但一个明智的解决方案是将服务对象存储到范围内。像这样:

$scope.myAnswer = myAnswerService

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

于 2014-01-11T10:28:51.220 回答