2016-02-18 2 views
0

В настоящее время я изучаю Angular 2, и у меня есть проблема с отправкой модели в мой back-end.Угловая модель 2 в html (используя http post)

Это как функция выглядит:

addDepartment(department: Department){ 
     var headers = new Headers(); 
     headers["Access-Control-Allow-Origin"] = "http://localhost:65402"; 
     headers.append('Content-Type', 'application/json'); 

    return this.http.post('http://localhost:65402/company/api/department'+ "/", JSON.stringify(department)) 
     .subscribe(res => { 
      this.departments = res.json(); 
     }); 

и это HTML:

<div [hidden]="!showAddView" align="center"> 

    <div> 
     <label for="editTitle">Department No:</label><br> 
     <input #departmentNo placeholder="id"> 
    </div> 
    <div> 
     <label for="editAbrv">Department name:</label><br> 
     <input #departmentName placeholder="name"> 
    </div> 
    <div> 
     <label for="editAbrv">Department Location:</label><br> 
     <input #departmentLocation placeholder="location"> 
    </div> 

    <div> 
     <a href="javascript:void(0);" (click)="addDepartment(department)" title="Add"> 
      Save 
     </a> 
     <a href="javascript:void(0);" (click)=showHide() > 
      Cancel 
     </a> 
    </div> 
</div> 

Полный код здесь: plunker

Я не знаю, как отправить это целое модель в заднюю панель. В нем указано, что department = undefined в моем методе addDepartment. Спасибо за помощь!

+0

В чем проблема? –

+0

Привет, В нем говорится, что отдел не определен. –

+0

Почему бы не использовать свою палочку? ;) – alital

ответ

1

Есть несколько проблем, с вашим кодом:

  • Вы звонящих (click)="addDepartment(department)" и это department не существует нигде. Вы можете изменить DIV оборачивать свои входы form и получить значения из него:

    <form #f="ngForm" [hidden]="!showAddView" align="center"> 
        .... 
        <a href="javascript:void(0);" (click)="addDepartment(f.value)" title="Add"> 
        .... 
    </form> 
    
  • Вы не используете Headers вы создали. Добавьте их к post() запросу:

    this.http.post('~', JSON.stringify(department), { headers: headers })` 
    
  • Кроме того, вы, вероятно, не нужно "Access-Control-Allow-Origin", те должны быть на вашем сервере.

+0

Я сделал, как вы сказали, но это не сработает. Я думаю, что проблема в html, но я не вижу этого. Потому что, когда я ввожу свои значения, значения не передаются моему методу. –

+0

Обновлен ответ. Ознакомьтесь с [docs] (https://angular.io/docs/ts/latest/api/common/NgForm-directive.html) для получения более подробной информации, если вам нужно. Plunker, с которым вы связаны, не работает, и я не могу проверить решение на данный момент ... – Sasxa

+0

Спасибо :) Я сделал это как форму и сделал свои входы: , теперь он передается как объект , Но у меня есть ошибка: POST http: // localhost: 65402/company/api/department/400 (Bad Request) –

0

Я не знаю, откуда взялся ваш departement. Я бы реорганизовать код использовать ngModel, как описано ниже:

<div [hidden]="!showAddView" align="center"> 
    <div> 
    <label for="editTitle">Department No:</label><br> 
    <input [(ngModel)]="departement.departmentNo" placeholder="id"> 
    </div> 
    <div> 
    <label for="editAbrv">Department name:</label><br> 
    <input [(ngModel)]="departement.departmentName" placehlder="name"> 
    </div> 
    <div> 
    <label for="editAbrv">Department Location:</label><br> 
    <input [(ngModel)]="departement.departmentLocation" placeholder="location"> 
    </div> 

    <div> 
    <a href="javascript:void(0);" (click)="addDepartment(department)" title="Add"> 
     Save 
    </a> 
    <a href="javascript:void(0);" (click)=showHide() > 
     Cancel 
    </a> 
    </div> 
</div> 

Вы должны инициализировать это свойство с пустым объектом:

contructor() { 
    this.department = {}; 
} 

Что касается заголовков, нет ничего, чтобы послать за CORS. Браузер автоматически отправит заголовок Origin, содержащий домен приложения, выполняющего запрос. Сервер обнаружит его и, если он поддерживает CORS, отправит обратно соответствующие заголовки (включая Access-Control-Allow-Origin). Эта ссылка может дать намеки о CORS:

Как подчеркивается Saxsa, Вы забыли использовать headers в ваш запрос ...

+0

Я удалил CORS (он исправлен в backend-части). Мой отдел определяется как: отдел: отдел; и отдел - это компонент, который обладает свойствами: departmentNo, departmentName и departmentLocation. –

+0

Мой конструктор в AppComponent выглядит так: constructor (@Inject (Http) private http: Http) { this.getAll (this.pageNumber, this.pageSize); это.addДепартамент (это.департамент); }, а в компоненте отдела я добавил departmentNo, departmentName и departmentLocation в нем. –

+0

'Департамент' не должен быть компонентом. Он просто будет содержать данные. Это может быть необработанный объект JS или простой класс типаScript. –

Смежные вопросы