Javascript AngularJs不更新模型

Javascript AngularJs不更新模型,javascript,angularjs,Javascript,Angularjs,我现在正试图用Angular来代替Knockout。 然而,似乎有一些怪癖,我到目前为止根本无法回避 在我的站点的登录功能中,我进行了一个ajax调用,获取了一些用户信息, 然后在控制器中设置此信息 像这样: $scope.login = function () { var data = { userName: $('#txtLoginName').val(), password: $('#txtLoginPassword

我现在正试图用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");
            }
        });
    }
$scope.login=函数(){
风险值数据={
用户名:$('#txtLoginName').val(),
密码:$('#txtLoginPassword').val(),
};
控制台信息(数据);
postJSON(“/strenghtracker/User/Login”),数据,函数(结果){
如果(result.result==“ok”){
$('loginDialog').modal('hide');

//设置控制器变量这与AngularJS没有意识到您的回调函数有关,它不会被跟踪。正如Yoshi已经建议的那样,使用
$scope.$apply
修复它,因为这会迫使AngularJS意识到

请注意,AngularJS内置了对使用
$http
$resource
发出AJAX请求的支持(对于REST服务)。使用这些对象的一个优点是,您不必手动使用
$apply
,另一个优点是,您的代码通过内置的单元测试支持保持可测试性。

使用Awesome,谢谢:)回答一下,我会为您做标记。谢谢,我更改了我自己的“postJSON”函数将我的回调封装在$apply中,因此它现在工作得非常好:-)