0

我现在正在尝试用 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 没有看到变量发生了变化。

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

想法?

4

1 回答 1

1

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

请注意,AngularJS 内置了对使用$http和进行 AJAX 请求的支持$resource(在 REST 服务的情况下)。使用这些对象之一的优点之一是您不必手动使用$apply,另一个是您的代码仍然可以通过对单元测试的内置支持进行测试。

于 2013-07-03T22:08:25.870 回答