Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在AngularJS中,为什么我无法将资源承诺回调中的数组分配给控制器中的作用域?_Javascript_Arrays_Angularjs_Angularjs Ng Repeat - Fatal编程技术网

Javascript 在AngularJS中,为什么我无法将资源承诺回调中的数组分配给控制器中的作用域?

Javascript 在AngularJS中,为什么我无法将资源承诺回调中的数组分配给控制器中的作用域?,javascript,arrays,angularjs,angularjs-ng-repeat,Javascript,Arrays,Angularjs,Angularjs Ng Repeat,考虑到下面所示的由两个不同路径生成的相同资源对象,由于某些原因,这些对象的行为不一致——在一种情况下,我可以成功地检索数组['values-response']['distinct-value'],而在另一种情况下,我在尝试时得到的是“undefined” 在服务中使用$q.all()返回的承诺上的then()方法后,向控制台写入以下内容: Resource $promise: Object $resolved: true values-response: Object > distin

考虑到下面所示的由两个不同路径生成的相同资源对象,由于某些原因,这些对象的行为不一致——在一种情况下,我可以成功地检索数组['values-response']['distinct-value'],而在另一种情况下,我在尝试时得到的是“undefined”

在服务中使用
$q.all()
返回的承诺上的
then()
方法后,向控制台写入以下内容:

Resource
$promise: Object
$resolved: true
values-response: Object
>  distinct-value: Array[64]
metrics: Object
name: "term"
type: "xs:string"
为什么我不能将不同值数组分配给要在
ng repeat
中使用的作用域?在将代码更改为使用承诺之前,我能够在
$resource
get()
方法的回调中这样做:

$scope.topics = data['values-response']['distinct-value'];
然后我可以在模板的
ng repeat
中使用
data ng repeat=“topic in topics”

但是,由于切换到承诺,如果我尝试这样做:

$scope.topics = data.topics['values-response']['distinct-value'];
然后控制台返回“undefined”,尽管根据上面的输出,它似乎已被解析

相反,我被要求做:

$scope.topics = data.topics;
然后访问
ng repeat
中的数组,如下所示,我不确定该数组是否已优化:

<button data-ng-repeat="topic in topics['values-response']['distinct-value'] | filter:textFilter | orderBy:browseOrder:browseDirection as resultsTopics" class="btn btn-default" type="button">
在从工厂返回
$q.all()
之前,以下操作成功:

Browse.get({
    facet: 'term'
  }, function(data) {
    $scope.topics = data['values-response']['distinct-value'];
  });

<button data-ng-repeat="topic in topics | filter:textFilter | orderBy:browseOrder:browseDirection as resultsTopics" class="btn btn-default" type="button">
Browse.get({
方面:“术语”
},函数(数据){
$scope.topics=data['values-response']['distinct-value'];
});

提前感谢您的帮助。

.get/.post
的成功回调参数之间存在差异。在
中,然后
函数(结果){}
结果。数据
中的
结果
相似

试一试

也不确定它的打字错误或您在
中遗漏了。获取您使用的

 $scope.topics = data['values-response']['distinct-value'];
中。然后

 $scope.topics = data.topics['values-response']['distinct-value'];

检查您在响应中添加的
主题
属性

不要在
中使用
$scope.$apply
,然后
。。。将创建摘要进行中错误在第二种情况下,我使用$q.all()组合了3个承诺——我想要一个承诺,只有在所有3个承诺都解决后才能解决(但我计划使用angular promise tracker,所以我可能不希望这样,但视图取决于所有3个资源操作是否成功,所以我认为组合它们可能是有意义的),因此,我按标签指定了索引,而在另一个例子中,我连续执行了3个资源类get()调用(为了保持代码段的简单,我只显示了“topics”的一个调用)。谢谢,但我担心这会导致错误“undefined不是对象(评估'results.data.topics')”,可能是因为我没有执行$scope.apply()但是@charlietfl建议不要这样做。是的,您使用
$q.all
的方法是正确的。但仍然是数据。主题还是数据本身就是主题,这不清楚吗?您是否可以更新您的内部的确切codeconsole.dir(数据)以查看数据的确切外观,然后您可以确定@vinayakj的建议是否正确。$scope.topics是否初始化为空数组?我想说的是,angular可能在未定义变量时尝试渲染,然后在定义变量时不更新。另一种方法是在您的ng repeat元素上使用ng if=“topics”,这样您就知道angular是否从未更新过变量的值。是的,对不起,我在简化代码时无意中删除了它$scope.topics在控制器中初始化为空数组,然后在BrowseService上调用then()。谢谢,我编辑了这个问题以包含它。不确定您是否可以将对象传递给
$q。all()
这不是承诺,总是传递承诺参数本身,然后从
中提取数据。然后
正确,但
$q。all
接受承诺的数组或对象,这就是我传递的内容
。然后
执行解析,我可以在控制台中看到我想要的数据,但是当我尝试将其分配给$scope变量时,我得到了“未定义”的数据。问题的关键是,在这两种情况下,我在控制台中看到相同的数据,但在一种情况下,我可以将其[“distinct value”]数组分配给$scope,而在另一种情况下,我不能。这就是谜团。。。。
 $scope.topics = data['values-response']['distinct-value'];
 $scope.topics = data.topics['values-response']['distinct-value'];