0

親スコープのコレクションがモーダルから保存された情報で更新されるようにする方法を見つけるのに最も苦労しています。

親にはイベントスピーカーのコレクションがあり、モーダルは 1 つのスピーカーをイベントに追加します。モーダルの [OK] ボタンをクリックすると、新しいスピーカーがページに追加されます。

データは保存され、モーダルは閉じますが、ページを更新しない限りモデルは更新されません。

スピーカーのコレクションを更新するコントローラー メソッドを次に示します。 $scope.speakersページ内の繰り返しオブジェクトにバインドされます。

$scope.updateSpeakersList = function () {
    factory.callGetService("GetSpeakers?eventId=" + $scope.event.eventId)
        .then(function (response) {
            var fullResult = angular.fromJson(response);
            var serviceResponse = JSON.parse(fullResult.data);

            $scope.speakers = serviceResponse.Content;

            LogErrors(serviceResponse.Errors);
        },
        function (data) {
            console.log("Unknown error occurred calling GetSpeakers");
            console.log(data);
        });
}

これは、モーダルが前のメソッドを呼び出してページを更新するという約束です。

$scope.openModal = function (size) {
    var modalInstance = $modal.open({
        templateUrl: "AddSpeakerModal.html",
        controller: "AddSpeakerModalController",
        size: size,
        backdrop: "static",
        scope: $scope, 
        resolve: {
            userId: function() {
                return $scope.currentUserId;
            },
            currentSpeaker: function () {
                return ($scope.currentSpeaker) ? $scope.currentSpeaker : null;
            },
            currentSessions: function () {
                return ($scope.currentSpeakerSessions) ? $scope.currentSpeakerSessions : null;
            },
            event: function () {
                return $scope.event;
            },
            registration: function() {
                return $scope.currentUserRegistration;
            }
        }
    });

    modalInstance.result.then(function (savedSpeaker) {

        $scope.savedSpeaker = savedSpeaker;

        $scope.updateSpeakersList();

    }, function () {
        console.log("Modal dismissed at: " + new Date());
    });
};

モデルが更新されないのはなぜですか?

4

3 に答える 3

0

問題を再現する最小限の例がなければ確実に知ることは困難ですが、「シャドウ スコープ」を更新していることが問題である可能性があります。これは、オブジェクトが変更される代わりにコピーされる Javascript の特異性です。

$scope.$apply()で変更を行った後に追加してみてくださいupdateSpeakerList()

于 2015-10-16T07:09:28.320 に答える
0

ここでの問題は、データが必ずしも更新されていなかったということではありません...本当の問題は、更新しようとした瞬間が、アプリの組み立て方にとって間違った瞬間だったことです。更新が利用可能になる前に、気付かずに基になるモデルを更新しようとしていました。AJAX 呼び出しはまだ進行中です。

私のモーダル内で [OK] をクリックすると、いくつかの異なる GET と POST が実行されます。AJAX 呼び出しが完了すると、更新が順次呼び出されると想定して、これらの呼び出しの外で更新を呼び出していました。(これは間違っていました。)

$scope.updateSpeakersList()呼び出しを工場への最終的な AJAX 成功呼び出し内に移動すると、すべてが期待どおりに機能しているように見えます。

于 2015-10-17T06:38:15.683 に答える
0

この投稿を確認してから、遊んでください。 AngularJS - POST 後に更新する

私にとってうまくいったのは、成功時にデータをスコープにプッシュしてから場所を設定することでした。新しいデータを投稿した後、私のものは次のようになりました。

$scope.look.push(data);
$location.path('/main');
于 2015-10-16T17:15:52.817 に答える