我在html中设置了一个由ng-click事件调用的方法:
<div ng-repeat="section in model.sections">
<a ng-click="updateSection($index)">
</div>
然后在我的javascript文件中,我有以下服务:
.factory('Sections', function($resource){
return{
onUnits: $resource('/api/sections/:uuid/units', {uuid:'@sectionUUID'}, {
get: {method: 'GET', params:{uuid: '@uuid'}, isArray:true}
}
}
}
从html调用的方法是:
$scope.updateSection = function(index){
$scope.model.sections[index].sectionUnits = Sections.onUnits.get({uuid: $scope.model.sections[index].sectionUUID}
,console.log($scope.model.sections[index])
);
}
在此更新发生之前,
$scope.model.sections[0].sectionUnits == ['d1','d2']
这是与此部分关联的单位的ID列表。此方法基本上使用看起来像{/ p>的真实unit
对象更新此列表
.sectionUnits = [{unitUUID: 'd1',
materials: ['m1','m2','m3']
}, {... }]
在我的浏览器中,上面的代码返回我正在寻找的更新的section
对象,所有unit
个对象都嵌套在section
下。
然而,我真正想要的是实现一个回调,该回调获取与此更新的materials
对象中的单元关联的所有section
的id列表,并检索它们。
如果我尝试了这一点,并进行了以下回调,我会得到sectionUnits
的列表,但仍然只是ID:
$scope.updateSection = function(index){
$scope.model.sections[index].sectionUnits = Sections.onUnits.get({uuid: $scope.model.sections[index].sectionUUID}
,console.log($scope.model.sections[index].sectionUnits)
);
}
我已经浏览了很多SO主题和原始文档,但此时我已经陷入困境。
谢谢!
答案 0 :(得分:1)
我遇到的模式最多的是创建资源对象,然后在回调中进行分配。因此,您将拥有:
,而不是当前的updateSections
函数
$scope.updateSection = function(index) {
Sections.onUnits.get(
{uuid: $scope.model.sections[index].sectionUUID},
function(results) {$scope.model.sections[index].sectionUnits = results}
)
}
我认为在你的代码中GET
的结果实际上并没有被分配,这就是为什么你要回到原来的id数组。
请注意,分配仅在资源的成功GET
上发生。你应该有一个单独的回调来处理任何错误。
另外请记住,服务是单身,所以如果你传递它,请注意不要改变Sections
,否则它会改变其他地方。
如果您想链接请求,以便在检索到某个部分之后获得材料,那么您将在分配后立即在回调中执行此操作。:
$scope.updateSection = function(index) {
Sections.onUnits.get(
{uuid: $scope.model.sections[index].sectionUUID},
function(results) {
$scope.model.sections[index].sectionUnits = results;
// Should contain some looping mechanism since results is an array.
$scope.getMaterials(results);
}
)
}
关于您的代码的其他几点说明:
sectionUnits
对象是一个字符串数组,但您的updateSection()
方法调用尝试将该数组作为对象引用。你说你可以得到一个控制台打印输出,所以我猜它是有效的,但你只是打错了.sectionUnits = [{unitUUID:'d1'}, {unitUUID:'d2'}]
?$resource
包裹起来,以方便用户使用。我发现它很容易使用。