AngularJs没有更新模型

时间:2013-07-03 21:17:27

标签: javascript angularjs

我正在尝试用Angular替换Knockout。 然而,到目前为止,我似乎无法解决一些怪癖。

在我网站的登录功能中,我进行了ajax调用并获取了一些用户信息, 然后在控制器中设置此信息。

像这样:

    $scope.login = function () {

        var data = {
            userName: $('#txtLoginName').val(),
            password: $('#txtLoginPassword').val(),
        };

        console.info(data);

        postJSON("/StrengthTracker/User/Login", data, function (result) {

            if (result.result == "ok") {
                $('#loginDialog').modal('hide');

       //setting controller variables <------------
                $scope.isLoggedIn = true;
                $scope.userId = result.userId;
                $scope.userName = result.userName;
                $scope.publicId = result.publicId;
                $scope.gender = result.gender;
                $scope.unitName = result.unit;

                console.info(result);

                notify("Welcome " + $scope.userName);
            }
            if (result.result == "fail") {
                notifyFail("Login failed");
            }
        });
    }

我可以看到返回了正确的数据,例如,notify(..)调用确实说“Welcome Roger”。到现在为止还挺好。 但似乎Angular并没有看到变量发生了变化。

如果我再次点击登录功能,那么角度会注意到更改,并了解用户已登录。

想法?

1 个答案:

答案 0 :(得分:1)

这与AngularJS没有意识到你的回调函数有关,它没有被跟踪。正如Yoshi已经建议的那样,使用$scope.$apply修复它,因为这会迫使AngularJS意识到。

请注意,AngularJS内置支持使用$http$resource发出AJAX请求(如果是REST服务)。使用其中一个对象的一个​​优点是您不必手动使用$apply,另一个是您的代码可以通过内置的单元测试支持来测试。