use*_*528 8 post angular-resource angularjs-service angular-http
使用角度1.1.5并需要将urlencoded数据传递给后端.我从这里开始使用解决方案: 如何将数据作为表单数据而不是请求有效负载发布?
$http({
method: 'POST',
url: url,
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
transformRequest: function(obj) {
var str = [];
for(var p in obj)
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
return str.join("&");
},
data: xsrf
}).success(function () {});
Run Code Online (Sandbox Code Playgroud)
我已经成功地将它嵌入到我的控制器中,但"更清洁"的方式是使用服务和$ resource而不是$ http对象.在本主题的1.1.2之后可以使用transformRequest和$ resource: $ resource transformResponse不工作 但我找不到任何有效的例子.任何人都可以使用$ resource作为服务对象提供上述解决方案的示例吗?
Mic*_*cka 14
对于csrf,在rails应用程序中,您必须添加<%= csrf_meta_tags %>标题布局(如果默认情况下不存在)
var app = angular.module('app', ['ngResource']);
app.config(["$httpProvider", function(provider)
{
provider.defaults.headers.common['X-CSRF-Token'] = $('meta[name=csrf-token]').attr('content');
}]);
Run Code Online (Sandbox Code Playgroud)
这是一个服务对象
app.factory('$folders', ['$resource', function($resource)
{
return $resource('/folders/:id',
{ id: '@id' },
{
list: { method: 'GET' , isArray: true }, //same as query
create: { method: 'POST' }, // same as save
update: { method: 'PUT' }
// DEFAULT IMPLEMENTATION OF $RESOURCE
// 'get': {method:'GET'},
// 'save': {method:'POST'},
// 'query': {method:'GET', isArray:true},
// 'remove': {method:'DELETE'},
// 'delete': {method:'DELETE'}
});
}]);
Run Code Online (Sandbox Code Playgroud)
这是一个控制器的例子
app.controller('projectController', ['$scope', '$folders', function($scope, $folders)
{
$scope.folders = $folders.list();
}]);
Run Code Online (Sandbox Code Playgroud)
Folders.list()将自动GET /folders/在服务器上执行并返回结果(应该是json)作为对象.
直接$scope.folders = Folders.list();在控制器中,$scope.folders将为空,当响应从服务器返回时,它将及时填充.
$ http和$ ressources的简单示例 http://jsfiddle.net/jhsousa/aQ4XX/
这是一个表格
%form{'ng-submit' => 'create(item)', 'ng-controller' => 'projectController', 'ng-init' => 'item.orientation=1;'}
%input{'ng-model'=>'item.folderName', :type => :text, :placeholder => 'Name', :name => 'folderName'}
%textarea{'ng-model'=>'item.description', :placeholder => 'Description', :required=>true, :name => 'description'}
%input{'ng-model'=>'item.orientation', :type=>'radio', :name=>'orientation', :value=>'1'}
%input{'ng-model'=>'item.orientation', :type=>'radio', :name=>'orientation', :value=>'2'}
%input{:type => :submit, :value => 'Create', :name => 'new-project'}
Run Code Online (Sandbox Code Playgroud)
你会注意到的ng-model.
'ng-model'=>'item.folderName'将$scope.item在其中创建一个并在其中projectController添加一个键folderName.其他人也一样ng-model.
'ng-init'=>'item.orientation=1;'将要执行表达式.所以它将执行以下操作item.orientation=1,这样我们就为我们的无线电输入设置了一个默认值,这很简单.
提交表单时ng-submit会捕获它并create从projectControllerwith item参数调用操作,不需要说item包含输入值吗?
这是控制器部分
app.controller('projectController', ['$scope', '$folders', function($scope, $folders)
{
$scope.create = function(item)
{
f = new $folders(item);
f.$save(function(data,headers)
{
alert('SAVED');
},
function(err,headers)
{
alert('FAILED');
});
};
}]);
Run Code Online (Sandbox Code Playgroud)
$scope.create是被调用的动作ng-submit,item也是item来自表单的参数,所以你会发现里面的东西,比如item.description.
Folders 是我们之前谈到的服务对象.
| 归档时间: |
|
| 查看次数: |
18590 次 |
| 最近记录: |