在控制器中,我需要检索段的状态。使用$resource
从API加载细分。
在资源中,segmentsresource.js
我有:
angular.module('appApp')
.factory('SegmentsResource', function ($resource) {
return $resource('http://localhost:3000/api/v1/segments/:id');
});
在服务中,segmentsservice.js
我有:
angular.module('appApp')
.service('SegmentsService', function (SegmentsResource) {
this.getSegmentStatus = function(segmentId) {
return SegmentsResource.get({
id: segmentId
}, function(segment) {
return segment.status;
})
};
});
我正在尝试return segment.status
,因此我可以在控制器main.js
中使用结果('可用','已翻译'等):
$scope.checkAndEditSegment = function(segmentId) {
SegmentsService.getSegmentStatus(segmentId)
.then(function(status) {
if (status === 'available') {
console.log('segment is available');
}
});
};
然而,这不起作用。控制台吐出:TypeError: Cannot read property 'then' of undefined'
,所以我的承诺有问题。
如何解决这个问题?
答案 0 :(得分:1)
但是,当您只需从控制器呼叫工厂时,为什么要采用这条漫长的路线。
angular.module('appApp')
.factory('SegmentsResource', function ($resource) {
return $resource('http://localhost:3000/api/v1/segments/:id');
});
$scope.checkAndEditSegment = function(segmentId) {
SegmentsResource.get(segmentId)
.then(function(status) {
if (status === 'available') {
console.log('segment is available');
}
});
};
答案 1 :(得分:0)
我决定使用$q
:
在服务中:
this.getSegmentStatus = function(segmentId) {
var dfd = $q.defer();
SegmentsResource.get({ id: segmentId }, function(segment) {
dfd.resolve(segment.status);
})
return dfd.promise;
};
在控制器中:
SegmentsService.getSegmentStatus(segmentId)
.then(function(status) {
console.log(status);
});