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

コントローラーの概要で、 を使用して値を取得するmyAnswerService.getAnswer(number);と、新しい値が返され、は値$scope.myAnswerコピーになります。

回答が値型の場合、それを変更してもサービス回答配列の値には影響しません。

回答配列にオブジェクト (参照型) が含まれている場合、のプロパティを操作する、サービスの配列内の回答によって参照される同じオブジェクト$scope.myAnswerのプロパティが更新されます。ただし、それを別の回答に置き換えると、回答配列内の回答は変更に気付かない

何を達成しようとしているのかはわかりませんが、賢明な解決策は、サービス オブジェクトをスコープに格納することです。このような:

$scope.myAnswer = myAnswerService

注:リダイレクトを行うときは、データが完全に消去されるため、ページ全体を更新しないようにしてください。

于 2014-01-11T10:28:51.220 に答える