AngularJS:如何重新启动控制器以更新要监视的数据源模型

angularjs: how to restart controllers to update the data source model to watch?

本文关键字:监视 数据源 模型 更新 重新启动 控制器 AngularJS      更新时间:2023-09-26

如何告诉 Angularjs 停止监视过期的数据对象并强制控制器重新启动以查看新的模型实例?

    var ang = angular.module('ang', []);
    ang.controller('userCtrl', function($scope) {
        $scope.userData = myProject.getUserData(); // an OOP js data tree
    } 
    angular.bootstrap(document, ['ang']);
    // ... 
    myProject.reloadUserData(); // userData now a new instance

Angular 运行良好,直到我销毁用户数据对象以创建新的数据对象实例。

如何告诉 angular 停止查看旧用户数据并开始查看新用户数据?基本上我想重新启动角度或控制器。

无需仅仅因为模型更新而重新启动您的 angular 应用程序。这不仅是迂回的,而且您还必须承受重新编译 DOM 的性能影响。

相反,我建议您创建一个服务来处理同步。

ang.factory('userService', function ($rootScope) {
    var userService = {
        // We'll initialize this in a moment
        data: undefined,
        // Method to refresh the data property
        refresh: function () {
            userService.data = myProject.getUserData();
        }
    };
    userService.refresh();
    return userService;
});

现在,在控制器中,您将使用此服务,而不是全局 myProject 对象。

ang.controller('userCtrl', function($scope, userService) {
    $scope.user = userService; // Bind to {{user.data}} in your templates
});

最后,每当你调用myProject.reloadUserData()时,你必须refresh userService对象。

$(document.body).injector().invoke(function (userService) {
    userService.refresh();
});

您可能只想将其添加到方法中。