Angularjs $resource和$q设置下拉初始值

Angularjs $resource和$q设置下拉初始值,angularjs,resources,q,Angularjs,Resources,Q,我有一个数据服务,上面写着: myApp.factory('locationsData', function ($resource) { return $resource('/api/Location/:id', { id: '@id' }, { update: { method: 'PUT' } });}); 然后,我使用这些位置填充视图中的下拉列表: <select ng-model="locationId" ng-options="item.LocationId as item

我有一个数据服务,上面写着:

myApp.factory('locationsData', function ($resource) {


return $resource('/api/Location/:id', { id: '@id' }, { update: { method: 'PUT' } });});
然后,我使用这些位置填充视图中的下拉列表:

<select ng-model="locationId" ng-options="item.LocationId as item.LocationName for item  in locations"></select>
这不起作用,我认为是因为$resource的异步特性——它还没有列表,所以我无法设置它

我知道$q是为了解决这个问题而设计的,但不确定如何创建承诺,并设置

$scope.locationId = 8;
完成后

我已经阅读了$q和$resource文档,但是我还没有看到一个好的代码示例,说明如何像我正在做的那样执行一个简单的get,然后在get承诺实现后执行一些函数/操作


谢谢。

我相信你会在控制器的某个地方做些什么

$scope.locations=locationsData.query();
query或get方法可以使用success和error函数的参数。差不多

locationsData.query(function(data){
});
所以你应该设置

$scope.locationId = 8;

在查询的成功函数中。

所以我不需要$q?这似乎奏效了。ng模型属性位于对象上时除外,例如
$scope.location.locationId
,当我尝试在控制器中访问它时除外,例如
$scope.location.locationId=8它不能运行。我可以通过执行
$scope.location=[],但当我提交表单时,location对象为空。我可能在做些傻事,你没有。另外,只要html模板中的绑定是ng model=“location.locationId”,$scope.location.locationId就可以工作。
$scope.locationId = 8;