繁体   English   中英

关闭模态后更新$ scope集合

[英]Update $scope collection upon closing modal

我正经历着最困难的时期,试图找到一种方法来确保使用范围中的已保存信息来更新父范围的集合。

父级有一组事件发言人,而该模式将一位发言人添加到事件中。 我希望在单击模式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());
    });
};

为什么模型不更新?

没有最小的例子可以重现问题,这很难确定,但是您的问题可能是您正在更新“影子范围”。 这是Javascript中的一种特殊现象,它导致对象被复制而不是被修改。

updateSpeakerList()进行更改后,尝试添加$scope.$apply() updateSpeakerList()

检查这篇文章,然后玩转它。 AngularJS-开机自检后刷新

对我有用的是将数据成功推送到我的范围内,然后设置位置,因此发布新数据后看起来像:

$scope.look.push(data);
$location.path('/main');

这里的问题不是我的数据不一定更新…真正的问题是我试图更新它的时刻是我的应用程序组合错误的时刻。 我试图在没有可用更新之前就更新基础模型。 AJAX调用仍在进行中。

在我的模式中,单击“确定”后,它会通过几个不同的GET和POST运行。 我在这些调用之外调用更新,假设一旦完成AJAX调用便会依次调用该更新。 (这是错误的。)

一旦将$scope.updateSpeakersList()调用移至工厂的最终AJAX成功调用之内,一切似乎都可以正常工作了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM