#angular
#angular
Вопрос:
Я новичок в Angular и пытался найти то, что мне нужно, но не смог. Пожалуйста, помогите.
Допустим, это рабочая функция с требуемыми параметрами:
export class ChildComponent implements OnInit {
...
datatable(params, callback) {
this.service.getList(params).subscribe(response => {
callback({
recordsTotal: response.recordsTotal,
recordsFiltered: response.recordsFiltered,
data: response.data
});
});
}
...
}
Все вышеперечисленное работает нормально. Но тогда я хочу сделать этот дочерний компонент общим компонентом, поэтому мне нужно отделить эту функцию и поместить ее в ParentComponent . Пожалуйста, обратите внимание, что приведенные ниже коды неверны, но я пытаюсь объяснить свою точку зрения следующим образом:
Дочерний компонент:
export class ChildComponent implements OnInit {
@Output() source: EventEmitter<any> = new EventEmitter<any>();
datatable(params, callback) {
this.source.emit(params, callback).subscribe(response => {
callback({
recordsTotal: response.recordsTotal,
recordsFiltered: response.recordsFiltered,
data: response.data
});
});
}
...
}
ParentComponent:
@Component({
selector: 'parent-component',
template: '
<child-component (source)="getList($event)"></child-component>
'
})
export class ParentComponent implements OnInit {
constructor(private service: Service) { }
getList(params) {
return this.service.getList(params);
}
}
Обслуживание:
export class Service {
constructor(private http: HttpClient) { }
getList(data) {
return this.http.post("http://example.com/list", data)
}
}
Я знаю, что поступаю неправильно. Мне нужно, чтобы дочерний компонент передавал параметр через функцию ParentComponent, а затем прослушивал возврат оттуда. Как мне сделать это правильно? Спасибо.
Ответ №1:
Я думаю, что вы не используете EventEmitter, вы определили его, но не используете
может быть
datatable(params, callback) {
this.service.getList(params).subscribe(response => {
callback({
recordsTotal: response.recordsTotal,
recordsFiltered: response.recordsFiltered,
data: response.data
});
this.source.emit('what ever you want to pass');
});
}
ParentComponent.ts
@Component({
selector: 'parent-component',
template: '
<child-component (source)="getList($event)"></child-component>
'
})
export class ParentComponent implements OnInit {
constructor(private service: Service) { }
getList(params) {
return this.service.getList(params).subscribe();
}
}
Комментарии:
1. Я не думаю, что это правильно, поскольку я пробовал это. EventEmitter на самом деле, похоже, не поддерживает подписку после отправки части, но есть ли другие способы сделать это правильно?
2. @the14thsky да, в моем примере была ошибка, теперь она исправлена, если бы вы могли отправить stackblitz.com образец был бы отличным
3. спасибо за ответ. вот пример кода — stackblitz.com/edit/… Пожалуйста, взгляните на комментарий, который я указал в codes .
4. попробуйте это stackblitz.com/edit /…
5. Предоставленные вами коды не включали никакой подписки, которая мне нужна для подписки на службу после вызова функции из родительского компонента.