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

时间:2015-01-16 20:47:22

标签: javascript angularjs

如何告诉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停止观看旧用户数据并开始寻找新用户数据?基本上我想重新启动角度或控制器。

1 个答案:

答案 0 :(得分:2)

由于模型已更新,因此无需重新启动角度应用。这不仅是圆形的,而且你必须承担重新编译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();
});

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