从ngResource对象调用函数不起作用
Calling a function from a ngResource object not working
假设我有一个名为"Stuff"的工厂。
app.factory('Stuff', function($resource) {
return $resource('api/v1/stuff/', {}, {
getThings: {
method: 'GET',
params: {id: '@id'},
url: 'api/v1/things/:id',
isArray: true
}
});
});
在这个工厂里,我有一个自定义的getThings函数。
在我的控制器中,如果我这样做:
$scope.stuffs = Stuff.query();
$scope.things = Stuff.getThings({id: $scope.stuffs[0].id});
它很管用,而$scope.things正是我想要的。
但如果我这样做:
$scope.stuffs = Stuff.query();
$scope.things = $scope.stuffs[0].$getThings();
我在角度资源中出错。ajax调用发生在正确的url上,我得到了正确的数据,但getThings在得到数据后立即出错,$scope.things中只剩下一个看起来像是promise的东西:
Object {then: function, catch: function, finally: function}
JS控制台中的错误为:
TypeError: undefined is not a function
at http://dev.blah.com/assets/angular-resource/angular-resource.js?body=1:558:27
at forEach (http://dev.blah.com/assets/angular/angular.js?body=1:326:18)
at $http.then.value.$resolved (http://dev.blah.com/assets/angular-resource/angular-resource.js?body=1:556:17)
at wrappedCallback (http://dev.blah.com/assets/angular/angular.js?body=1:11574:81)
at wrappedCallback (http://dev.blah.com/assets/angular/angular.js?body=1:11574:81)
at http://dev.blah.com/assets/angular/angular.js?body=1:11660:26
at Scope.$eval (http://dev.blah.com/assets/angular/angular.js?body=1:12703:28)
at Scope.$digest (http://dev.blah.com/assets/angular/angular.js?body=1:12515:31)
at Scope.$apply (http://dev.blah.com/assets/angular/angular.js?body=1:12807:24)
at done (http://dev.blah.com/assets/angular/angular.js?body=1:8380:45)
我不明白为什么这不起作用。
我相信资源查询会返回promise。试试这个:
Stuff.query(function(response) {
response[0].$getThings(function(things) {
$scope.things = things;
);
});
或者:
Stuff.query()
.$promise
.then(function(stuff) {
$scope.stuffs = stuff;
return stuff[0].$getThings();
})
.then(function(things) {
$scope.things = things;
});
请参阅此plnkrhttp://plnkr.co/edit/qlMrZ9?p=preview.在$resource.query()上返回$promise,在解析之前使用返回的值将导致错误。
这是在服务中。js
var myServices = angular.module('myApp.services', ['ngResource']);
myServices.factory('Stuff', ['$resource', function($resource) {
return $resource('stuff.json', {}, {
getThings: {
method: 'GET',
params: {id: '@id'},
url: ':id/things.json',
isArray: false
}
});
}]);
这在controllers.js 中
angular.module('myApp.controllers', [])
.controller('MyCtrl1', ['$scope', 'Stuff', function($scope, Stuff) {
$scope.data = {};
$scope.thingies = [];
$scope.data = Stuff.get();
console.log('is stuffs resolved='+$scope.data.$resolved);
$scope.thingies = Stuff.getThings({id: 'id1'});
console.log('is thingies resolved='+$scope.thingies.$resolved);
}])
.controller('MyCtrl2', ['$scope', 'Stuff', function($scope, Stuff) {
$scope.data = {};
$scope.thingies = [];
$scope.status = [];
Stuff.get(function(response){}).$promise.then(
function(value1) {
$scope.data = value1;
console.log("MyCtrl 2 stuffs="+$scope.data.stuffs[0].id);
Stuff.getThings({id:$scope.data.stuffs[0].id}).
$promise.then(
function(value2){
$scope.thingies = value2;
console.log("MyCtrl 2 thingies="+value2.things);
}, function(error2){
console.log('error in Stuff.getThingies='+error2);
$scope.status = error2;
});
}, function(error1){
console.log('error in Stuff.get='+error1);
$scope.status = error1;
}
);
}]);
我不懂你的代码行。这条线路缺少一些东西。
$scope.stuffs[0].$getThings();
你需要向我们展示你的实际代码或创建一个plnkr,这样我们才能更好地帮助你。
相关文章:
- Ember Data DS.Model's set函数不起作用
- 为什么我的JavaScript堆栈排序函数不起作用
- Javascript onchange()函数不起作用
- 另一个Ajax函数触发的Ajax函数不起作用
- 从PHP调用JS函数不起作用
- jQuery validate函数不起作用
- JS-窗口宽度函数不起作用
- javascript函数,该函数不起作用,但不会显示任何错误
- 为什么这个排序函数不起作用
- 为什么这个反向函数不起作用
- Javascript parseInt 函数不起作用
- 我的函数不起作用,Ajax调用,JQuery,调用外部?我不知道
- 主干构造函数不起作用
- Javascript:this.value 函数不起作用
- Mocha 的 beforeEach() 和 done() 函数不起作用
- 在jQuery中,我的函数不起作用
- jquery-ui-rails的draggable和dropable函数不起作用
- 数学函数不起作用
- Javascript-创建打印到HTML的函数不起作用
- 我上传了客户's服务器一个js函数不起作用