1

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

我有一个 $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 已经在进行中的错误”)时,ng-model 没有任何变化。

这是我的 ng 控制器:

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 并显示值?

谢谢

4

1 回答 1

2

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

$scope.invitation = d;

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

<div ng-controller="editInvitationCtrl>
    <input type="text" name="totalInvitations"
     ng-model="invitation.totalInvitations" required smart-float/>
</div>
于 2013-06-19T17:22:33.873 回答