Javascript 角度$resource未按预期工作
我在AngularJS中有一个非常简单的地址应用程序。它使用Javascript 角度$resource未按预期工作,javascript,angularjs,Javascript,Angularjs,我在AngularJS中有一个非常简单的地址应用程序。它使用$resource连接到API 我使用的ID是该人的手机号码(我知道这不是最好的方法,但它只是一个示例应用程序,用于显示三层应用程序设置),因此我有两个相同表单的页面: 我面临的问题是,它使用相同的$resource来保存新地址和编辑后的地址。当我ḿ 保存新地址时必须使用urlhttp://127.0.0.1:5000/api/contacts/没有附加id(它将在api/数据库端获得的新id是填写的移动电话号码) 当我编辑一个现有地
$resource
连接到API
我使用的ID是该人的手机号码(我知道这不是最好的方法,但它只是一个示例应用程序,用于显示三层应用程序设置),因此我有两个相同表单的页面:
我面临的问题是,它使用相同的$resource来保存新地址和编辑后的地址。当我ḿ 保存新地址时必须使用urlhttp://127.0.0.1:5000/api/contacts/
没有附加id(它将在api/数据库端获得的新id是填写的移动电话号码)
当我编辑一个现有地址并单击保存按钮时,它必须使用另一个url<代码>http://127.0.0.1:5000/api/contacts/@手机
因此,我已经阅读了$resource上的angular文档,其中声明您可以在操作中覆盖您的默认参数。因此,这就是我尝试使用以下代码所做的:
$resource('http://127.0.0.1:5000/api/contacts/:id',{id:'@mobilePhone'},{
get: {
method: 'GET'
}, update: {
method: 'PUT'
}, save: {
method: 'POST',
id:''
}
},{});
考虑到这些信息,这似乎是正确的。它分别在GET和update方法的每个GET和每个PUT上附加mobilePhone号码。当调用save方法时,它应该用空字符串覆盖:id
,但它不会这样做。
很明显我做错了什么
如果你需要更多的代码,请告诉我,我会尽量保持它的干净
更新:
下面是我如何调用save方法的:
....
.controller('MovieCreateController',function($scope,$state,$stateParams,Movie){
$scope.movie=new Movie();
$scope.addMovie=function(){
$scope.movie.$save(function(){
$state.go('movies');
});
}
}
这是编辑方法:
....
.controller('MovieEditController',function($scope,$state,$stateParams,Movie){
$scope.updateMovie=function(){
$scope.movie.$update(function(){
$state.go('movies');
});
};
$scope.loadMovie=function(){
$scope.movie=Movie.get({id:$stateParams.id});
};
$scope.loadMovie();
});
您的问题中没有太多的代码,所以我将尝试解释如何使用$resource 请查看以下代码:
// The $resource service is a helper to create a 'constructor' function
// Contact below is a function
var Contact = $resource('http://127.0.0.1:5000/api/contact/:id',{id:'@mobilePhone'}, {
get: {
method: 'GET' // You don't need to override the GET
}, update: {
method: 'PUT'
}, save: {
method: 'POST'
}});
// Be sure to create an 'entity' from the Contact $resource
// The 'new' will create a $resource instance with $update, $save methods overridden methods
var contact = new Contact({name: 'foobar'});
contact.$save(); // Will send a POST request
contact.mobilePhone = 2; // This is your id !
contact.$update(); // Will send a PUT request
如果您的资源始终具有RESTful表示,我建议您使用,如建议的:
…而不是总是覆盖$resource方法。这就是您需要调用save方法的方式 $scope.movie=新电影()
这就是您需要调用编辑方法的方式
$scope.movie=new Movie();
$scope.updateMovie=function(){
$scope.movie.$update({ "mobilePhone": $stateParams.id},function(){
$state.go('movies');
});
};
为此,您需要为$resource.com创建一个工厂,这总是值得推荐的
试试这个
.factory('movie', ['$resource', function ($resource) {
return $resource('http://127.0.0.1:5000/api/contacts/:id',{id:'@mobilePhone'},{}, {
update: { method: 'PUT' },
query: {
method: 'GET',
isArray: false
}
})
}])
将工厂注入控制器
.controller('MovieCreateController',['$scope','$state','$stateParams','movie',function($scope,$state,$stateParams,Movie){
}]);
您好,请参考是的,我确实是在这个基础上建立的(巧合),但我无法用那里提供的信息来理解。请您添加您的帖子,并将您如何称呼他们的请求放入其中?@Parshuram,我已经更新了问题。这并没有为我解决问题。除非我删除
$scope.movie=new movie(),否则它甚至无法工作从编辑方法中选择“代码>”。然后,它的工作原理与以前一样。不,您需要实例化资源,而不是另一个对象,请参阅@FrancoisMurel answer/
.factory('movie', ['$resource', function ($resource) {
return $resource('http://127.0.0.1:5000/api/contacts/:id',{id:'@mobilePhone'},{}, {
update: { method: 'PUT' },
query: {
method: 'GET',
isArray: false
}
})
}])
.controller('MovieCreateController',['$scope','$state','$stateParams','movie',function($scope,$state,$stateParams,Movie){
}]);