2016-11-18 10 views
0

У меня есть родительский компонент, управляющий двумя детьми. FormChild - это форма ввода, которая добавляет учителей в список и редактирует их, ListChild - это список учителей, которые были введены/отредактированы с помощью FormChild. Желаемое поведение (которое я получил частично для работы) - это изменения в FormChild, отраженные в ListChild.Угловой 2: компонент списка обновления из компонента формы sibling

FormChild имеет два режима; редактировать и добавлять. Флаг определяет, имеет ли форма «добавить» значения или «редактировать» значения. Когда флаг (редактирование) истинен, вызывается метод службы «editTeacher», когда он является ложным, вызывается метод службы «addTeacher».

public emitChangeNotification() { 
    this.changeNotifier.emit(); 
} 

teacherAddEdit(event) { 

    if (!this.editing) { 
    this._userService.addTeacher(this.userItem) 
     .subscribe(
     nextItem=> this.nextItemMsg = nextItem 
     , error => this.errorMsg = <any> error 
     ,()=>this.emitChangeNotification() 
    ); 
    } 
    else { 
    this._userService.editTeacher(this.userItem) 
     .subscribe(
     nextItem=> this.nextItemMsg = nextItem 
     , error => this.errorMsg = <any> error 
     ,()=>this.emitChangeNotification() 
    ); 
    } 
    this.initForm(); 
} 

Обратите внимание, что в случаях добавления и редактирования вызовы службы практически одинаковы. Предполагается, что здесь происходит то, что при завершении наблюдаемый вызовет this.EmitChangeNotification, который будет пузыриться до родителя, а затем вызывает обновление ListChild.

Проблема заключается в том, что ListChild обновляется только при добавлении, а не при редактировании! Прослеживая код с помощью f12, я вижу, что в случае «add» this.EmitChangeNotification вызывается; но не в случае редактирования. Это только проблема с web ui; обратный конец получает вызов, и изменения сохраняются в базе данных просто отлично.

вызовы служб в службе идентичны для конкретного фоновым метода Web API называется, за исключением:

addTeacher(userToCreate:CreateUser) 
{ 
    let Url = this.BASEURL + '/accounts/create'; 
    let headers = new Headers({ 
    'Accept': 'application/json', 
    'Content-Type': 'application/json' 
    }); 
    let options = new RequestOptions({ headers: headers }); 
    let body = JSON.stringify(userToCreate); 
    return this._http.post(this._createUserUrl, body, options).map((res: Response) => res.json()); 
} 

editTeacher(userToChange:CreateUser) 
{ 
    let Url = this.BASEURL + '/updateTeacher/' + userToChange.UserId; 
    let headers = new Headers({ 
    'Accept': 'application/json', 
    'Content-Type': 'application/json' 
    }); 
    let options = new RequestOptions({ headers: headers }); 
    let body = JSON.stringify(userToChange); 
    return this._http.post(Url, body, options).map((res: Response) => res.json()); 
} 

Первоначально «editTeacher» в службе использовал _http.put; я изменил это на _http.post; но это не помогло. Я "ве посмотрел на ряд примеров, кажется, что это должно работать ... что я делаю неправильно

заранее спасибо

Edit: еще один ключ ... кажется, что ' на полном»обратного вызова подписываться не вызывается вообще в„изменить“случае я заменял:.

,()=>this.emitChangeNotification() 

с

,()=>console.log('tell someone') 

и log выводит сообщение при добавлении , но не при редактировании.

Я не могу видеть, как они разные ...

+0

Как вы узнали, что при редактировании 'emitChangeNotification' не вызывается? вы получаете какую-либо ошибку? – ranakrunal9

+0

Я вижу это путем одиночного перехода через код с f12 на хром. Вместо того, чтобы вводить changeNotifier.Emit() непосредственно в качестве третьего аргумента для подписки, я написал отдельную функцию emitChangeNotification(). Я установил точку останова на эту функцию, и она ломается при добавлении, но не при редактировании. – user2785918

ответ

0

Going ответить на мой собственный вопрос ....

На самом деле, веб-интерфейс не отличается.

Разница заключается в том, что веб-ави звонки вызывали угловое обслуживание. Похоже, что должно случиться, что вызов завершения завершается, чтобы что-то должно было быть возвращено из API.

В случае редактирования я ничего не возвращал, только HTTP.OK, но когда я изменил это, чтобы вернуть объект пользователя, будет возвращен обратный вызов, а список обновлен. Мне кажется, что было бы хорошо записать где-нибудь, поэтому я предлагаю его здесь для потомков в надежде, что он спасет кого-то от печали.

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

  • Нет связанных вопросов^_^