我正在使用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和显示值需要什么?
由于
答案 0 :(得分:2)
看起来这里的大部分内容都是正确的,我假设您已调试以查看它是否符合此行:
$scope.invitation = d;
如果是这种情况,我唯一能看到的错误就是顶部附近定义的HTML元素没有包含在控制器定义的区域内。
<div ng-controller="editInvitationCtrl>
<input type="text" name="totalInvitations"
ng-model="invitation.totalInvitations" required smart-float/>
</div>