Кроме GET-запросов Angular позволяет отправлять остальные типы запросов: POST, PUT, DELETE. Рассмотрим, как выполнять POST-запросы.
Пусть у нас есть следующая структура проекта:
В файле user.ts определен класс User, который представляет отправляемые и получаемые данные:
1234
exportclassUser{name:string;age:number;}
Для тестирования обработки на сервере можно определить код, который получает post-запрос, каким-то образом обрабатывает и возвращает результат. Например, если применяется PHP, можно взять следующий скрипт:
1 2 3 4 5 6 7 8 91011121314151617
<?phpheader('Access-Control-Allow-Origin: *');header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token , Authorization');$user=json_decode(file_get_contents('php://input'),true);if(isset($user['name'])&&isset($user['age'])){$user['age']=$user['age']+10;echojson_encode($user);}else{echo"веденные данные некорректны";}?>
Если применяется ASP.NET WEB API, можно определить следующий контроллер:
Если используется Web API, то на стороне сервера надо подключить CORS.
Для имитации обработки в обоих случаях к возрасту пользователя добавляется число 10.
Можно взять какую-то другую технологию сервера.
Далее в файле http.service.ts определим сервис для отправки данных:
1 2 3 4 5 6 7 8 910111213141516171819
import{Injectable}from'@angular/core';import{HttpClient}from'@angular/common/http';import{User}from'./user';@Injectable()exportclassHttpService{constructor(privatehttp:HttpClient){}//http://localhost:60489/Home/PostUser ASP.NET MVC 5//http://localhost:8080/angular/setUser.php PHP// http://localhost:60820/api/values ASP NET Wep API 2postData(user:User){constbody={name:user.name,age:user.age};returnthis.http.post('http://localhost:60820/api/values',body);}}
Здесь определен метод postData, который получает для отправки объект User. Сами отправляемые данные представляют объект body. Для отправки применяется метод http.post(), в который передается адрес сервера и отправляемый объект.
При отправке запроса из другого домена опять же следует не забывать про ограничения кроссдоменных запросов. Поэтому для тестирования вне зависимости от технологии сервера, для серверного приложения должна быть включена функциональность CORS. Иначе наше приложение на Angular не сможет получить результат обработки.
В шаблоне определена форма ввода. По нажатию на кнопку данные отправляются на сервер, а полученный ответ отображается под формой:
При получении данных с сервера следует учитывать регистр свойств. Как правило, для свойств класса в TypeScript применяется camelCase. В некоторых языках программирования, например, в C#, для названий свойств класса используется PascalCase. Поэтому либо на стороне сервера следует сериализовать объект, у которого названия свойств применяют camelCase, либо на стороне клиента при получении данных следует проводить постобработку результатов запроса для приведения их в нужную форму.
Выше предложенный способ подходит, если, скажем, нам надо отправлять не все данные из объекта User или если возникает необходимость вручную сконструировать отправляемый объект. Но также для отправки можно передать весь объект:
1 2 3 4 5 6 7 8 9101112131415161718
import{Injectable}from'@angular/core';import{HttpClient}from'@angular/common/http';import{User}from'./user';@Injectable()exportclassHttpService{constructor(privatehttp:HttpClient){}//http://localhost:60489/Home/PostUser ASP.NET MVC//http://localhost:8080/angular/setUser.php PHP// http://localhost:60820/api/valuespostData(user:User){returnthis.http.post('http://localhost:60820/api/values',user);}}
Также при отправке мы можем устанавливать различные заголовки с помощью объекта HttpHeaders:
import{Injectable}from'@angular/core';import{HttpClient,HttpHeaders,}from'@angular/common/http';import{User}from'./user';@Injectable()exportclassHttpService{constructor(privatehttp:HttpClient){}//http://localhost:60489/Home/PostUser ASP.NET MVC//http://localhost:8080/angular/setUser.php PHP// http://localhost:60820/api/postpostData(user:User){constmyHeaders=newHttpHeaders().set('Authorization','my-auth-token');returnthis.http.post('http://localhost:60820/api/values',user,{headers:myHeaders,});}}