我在使用服务/工厂进行REST接口并在create方法的回调函数中访问$ scope变量的当前数据时遇到问题:
controllers.controller('ResourceAddCtrl', ['$scope', ... 'Resource','ResourceComb',
function($scope, ...) {
...
$scope.selectedEntryId = {};
$scope.resource = new Resource();
$scope.addResource = function(){
$scope.resource.$create(function(response){
var id = response.id;
console.log($scope.selectedEntryId);
//ResourceComb.$create({res_id : id, rescomb_id : $scope.selectedEntryId},function(){});
});
};
}]);
问题是$scope.selectedEntryId
始终是回调方法中的初始值,尽管它在html代码中使用了whith ng-model并且值得到了完全更新,因为{{selectedEntryId}}产生了预期的输出在bindet输入字段中键入数字。
任何人都知道我的错误是什么或如何-i可以解决问题?
答案 0 :(得分:0)
这可能太明显无法解决您的问题,但在我看来,一旦返回,您需要设置范围内的值。
// fwiw I'd prob. make the default a string
$scope.selectedEntryId = '';
$scope.resource = new Resource();
$scope.addResource = function(){
$scope.resource.$create(function(response){
// Set the ID on the scope
$scope.selectedEntryId = response.id;
// This is trivial now, but it will be the correct value
console.log($scope.selectedEntryId);
// ...and the HTML should automatically update itself, as well.
});
};
答案 1 :(得分:0)
我假设Resource
是ngResource,在这种情况下,您传递给$create
的函数不回调。
来自文档:
- HTTP GET“类”操作:
Resource.action([parameters], [success], [error])
- 非GET“类”操作:
Resource.action([parameters], postData, [success], [error])
- 非GET实例操作:
instance.$action([parameters], [success], [error])
因此,在您的代码中,您实际上是在传递[parameters]
,而不是[success]
- 因此当函数运行时调用尚未进行,因此selectedEntryId
是其初始值。< / p>
鉴于此,请尝试以下方法:
$scope.addResource = function(){
$scope.resource.$create(null, function(response){
var id = response.id;
console.log($scope.selectedEntryId);
//ResourceComb.$create({res_id : id, rescomb_id : $scope.selectedEntryId},function(){});
});
};
答案 2 :(得分:0)
好的,真正的问题是不同的。我尝试了一个新的简单示例(Plunker
)并发现原因必须是ngInclude。我没想到这会产生影响:看看这个例子:
在主控制器中进行更改时,模型始终在一个方向上更新,但在包含页面中另一方面更改控制器变量x不会更新。