У меня есть родительский компонент, управляющий двумя детьми. 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 выводит сообщение при добавлении , но не при редактировании.
Я не могу видеть, как они разные ...
Как вы узнали, что при редактировании 'emitChangeNotification' не вызывается? вы получаете какую-либо ошибку? – ranakrunal9
Я вижу это путем одиночного перехода через код с f12 на хром. Вместо того, чтобы вводить changeNotifier.Emit() непосредственно в качестве третьего аргумента для подписки, я написал отдельную функцию emitChangeNotification(). Я установил точку останова на эту функцию, и она ломается при добавлении, но не при редактировании. – user2785918