Angularjs:ng-model在对象更改后不刷新

时间:2013-06-19 17:14:23

标签: javascript angularjs angularjs-scope

我正在使用angularjs,我对ng-model update有点问题。

我在服务中有一个$ scope对象,它在ng-controller之外加载了ajax。

该服务如下:

app.factory('myService', function($http) {
    var myService = {
            async: function(code) {
                var promise = $http.get(url).then(function (response) {
                    return response.data;
                });
                return promise;
            }
    };
    return myService;
});

这样可行,并且ng-controller中的$ scope对象已更新。

现在我需要更新并显示html页面中输入文本中的值,该值具有更新对象的ng-model属性,如下所示:

<input type="text" name="totalInvitations"
                                ng-model="invitation.totalInvitations" required smart-float/>

但是,当我执行$ scope.safeApply()函数时(我使用safeApply来防止“$ digest has in progress error”)ng-model中没有任何变化。

这是我的ng-controller:

function editInvitationCtrl(myService, $scope, $http) {
    $scope.safeApply = function(fn) {
        var phase = this.$root.$$phase;
        if(phase == '$apply' || phase == '$digest') {
            if(fn && (typeof(fn) === 'function')) {
                fn();
                console.log(phase);
            }
        } else {
            console.log("apply");
            this.$apply(fn);
        }
    };

    myService.async($scope.code).then(function(d) {
        $scope.invitation = d;
        $scope.safeApply(function(){
            console.log(JSON.stringify($scope.invitation));
        });
    });

我做错了什么?

更新ng-model和显示值需要什么?

由于

1 个答案:

答案 0 :(得分:2)

看起来这里的大部分内容都是正确的,我假设您已调试以查看它是否符合此行:

$scope.invitation = d;

如果是这种情况,我唯一能看到的错误就是顶部附近定义的HTML元素没有包含在控制器定义的区域内。

<div ng-controller="editInvitationCtrl>
    <input type="text" name="totalInvitations"
     ng-model="invitation.totalInvitations" required smart-float/>
</div>