AngularJS应用程序在$resource query()中使用参数崩溃
我创建了一个简单的工厂,返回$resource:AngularJS应用程序在$resource query()中使用参数崩溃,angularjs,Angularjs,我创建了一个简单的工厂,返回$resource: app.factory('OusService', function ($resource,BASE_API) { var res; res = $resource(BASE_API+'/ou/:ouId',null,{ update: { method: 'PUT' // this method issues a PUT request } }); return res
app.factory('OusService', function ($resource,BASE_API) {
var res;
res = $resource(BASE_API+'/ou/:ouId',null,{
update: {
method: 'PUT' // this method issues a PUT request
}
});
return res;
});
然后我在名为“navCtrl”的控制器中使用$resource:
app.controller('navCtrl', ["$scope","$localStorage","OusService", function ($scope,$localStorage,OusService) {
var navOrg = $localStorage.navOrg;
OusService.query({ouId: navOrg.ou_id}).$promise.then(function(data){
console.log(data);
}, function(error) {
console.log(error);
});
}]);
这段代码完全崩溃了,但是如果我删除“{ouId:navOrg.ou_id}”,代码将被执行,但查询不包含所需的参数。我试着没有承诺,没有回访,没有回访,也没有承诺。代码总是带着参数崩溃
我还尝试在工厂中定义默认参数
错误:
TypeError: V is not a function
at http://10.0.0.145:8003/layout1/assets/js/app.min.js:34:14237
at forEach (http://10.0.0.145:8003/layout1/assets/js/app.min.js:10:14316)
at C.setUrlParams (http://10.0.0.145:8003/layout1/assets/js/app.min.js:34:14122)
at Function.l.(anonymous function) [as query] (http://10.0.0.145:8003/layout1/assets/js/app.min.js:34:12722)
at new <anonymous> (http://10.0.0.145:8003/layout1/assets/js/controllers/navCtrl.js:13:16)
at Object.invoke (http://10.0.0.145:8003/layout1/assets/js/app.min.js:11:16221)
at extend.instance (http://10.0.0.145:8003/layout1/assets/js/app.min.js:13:8182)
at nodeLinkFn (http://10.0.0.145:8003/layout1/assets/js/app.min.js:12:11139)
at compositeLinkFn (http://10.0.0.145:8003/layout1/assets/js/app.min.js:12:2680)
at http://10.0.0.145:8003/layout1/assets/js/app.min.js:12:1389 <nav data-ng-include=" 'assets/views/partials/nav.html' " class="ng-scope" data-ng-animate="1">
TypeError:V不是函数
在http://10.0.0.145:8003/layout1/assets/js/app.min.js:34:14237
在弗雷赫(http://10.0.0.145:8003/layout1/assets/js/app.min.js:10:14316)
在C.seturlparms处(http://10.0.0.145:8003/layout1/assets/js/app.min.js:34:14122)
at Function.l.(匿名函数)[作为查询](http://10.0.0.145:8003/layout1/assets/js/app.min.js:34:12722)
在纽约(http://10.0.0.145:8003/layout1/assets/js/controllers/navCtrl.js:13:16)
在Object.invoke(http://10.0.0.145:8003/layout1/assets/js/app.min.js:11:16221)
例如(http://10.0.0.145:8003/layout1/assets/js/app.min.js:13:8182)
在诺德琳(http://10.0.0.145:8003/layout1/assets/js/app.min.js:12:11139)
在KFN(http://10.0.0.145:8003/layout1/assets/js/app.min.js:12:2680)
在http://10.0.0.145:8003/layout1/assets/js/app.min.js:12:1389
编辑:
我将angularjs从1.5.7更新到1.5.11,问题已经解决
谢谢你这样使用。。你有没有试过这样的方法:
app.factory('OusService', function ($resource,BASE_API) {
var res;
res = $resource(BASE_API+'/ou/:ouId',{'@ouId':ouId},{
query: {
method: 'GET',isArray:true // or false if return an object
}
});
return res;
});
然后你想怎么用就怎么用
app.controller('navCtrl', ["$scope","$localStorage","OusService", function ($scope,$localStorage,OusService) {
var navOrg = $localStorage.navOrg;
OusService.query({ouId: navOrg.ou_id}).$promise.then(function(data){
console.log(data);
}, function(error) {
console.log(error);
});
}]);
像这样使用。。你有没有试过这样的方法:
app.factory('OusService', function ($resource,BASE_API) {
var res;
res = $resource(BASE_API+'/ou/:ouId',{'@ouId':ouId},{
query: {
method: 'GET',isArray:true // or false if return an object
}
});
return res;
});
然后你想怎么用就怎么用
app.controller('navCtrl', ["$scope","$localStorage","OusService", function ($scope,$localStorage,OusService) {
var navOrg = $localStorage.navOrg;
OusService.query({ouId: navOrg.ou_id}).$promise.then(function(data){
console.log(data);
}, function(error) {
console.log(error);
});
}]);
我不相信
$resource
query
方法接受参数。相反,它返回一个结果数组。如果您想在中传递id
,我建议使用get
OusService.get({ouId: navOrg.ou_id}).$promise.then(function(data){
console.log(data);
}, function(error) {
console.log(error);
});
此外,请尝试将资源更新为以下内容:
app.factory('OusService', ['$resource', 'BASE_API',
function($resource, BASE_API) {
var res;
res = $resource(BASE_API + '/ou/:ouId', {ouId: @ouId}, {
update: {
method: 'PUT'
}
});
return res;
}
]);
需要注意的关键变化是:
{ouId:@ouId}
以及['$resource',BASE\u API',
我不相信$resource
query
方法接受参数。相反,它返回一个结果数组。如果您想在中传递id
,我建议使用get
OusService.get({ouId: navOrg.ou_id}).$promise.then(function(data){
console.log(data);
}, function(error) {
console.log(error);
});
此外,请尝试将资源更新为以下内容:
app.factory('OusService', ['$resource', 'BASE_API',
function($resource, BASE_API) {
var res;
res = $resource(BASE_API + '/ou/:ouId', {ouId: @ouId}, {
update: {
method: 'PUT'
}
});
return res;
}
]);
需要注意的关键变化是:
{ouId:@ouId}
以及['$resource','BASE_API',
感谢您的回复,但不幸的是它抛出了相同的错误。我只是不明白。我只是用“无效参数”进行了测试,比如.query({test:'testing'})它不会崩溃,但不会向API发送任何参数。如果我尝试发送“ouId”,则会崩溃。感谢您的回复,但不幸的是,它会抛出相同的错误。我只是不明白。我只是使用“无效参数”进行测试,如.query({test:'testing'})它不会崩溃,但不会向API发送任何参数。如果我尝试发送“ouId”,它会崩溃@SRUEL,更新了我的答案。我想这可能会解决问题。现在我对uglify的咕噜任务正在崩溃:意外字符“@”。我将尝试删除该任务。@SRUEL,这很可能与依赖注入有关。我再次更新了答案,希望能够防止该问题。不起作用。可能其他地方出了问题…谢谢你,我知道了我会继续排除故障。从angularJS 1.5.7升级到1.5.11,问题已经解决。@SRUEL,更新了我的答案。我想这可能会解决问题。现在我对uglify的grunt任务崩溃:意外字符“@”。我将尝试删除该任务。@SRUEL,这很可能与依赖注入有关。我再次将答案更新为,h操作上,防止出现该问题。不起作用。其他地方可能有问题…谢谢,我将继续进行故障排除。从angularJS 1.5.7升级到1.5.11,问题已经解决。