Вы можете сделать несколько вещей, чтобы заставить его работать, вместо того, чтобы подписывать общую тему или источник событий для всех компонентов, динамически создавать уникальные темы для каждого компонента.Так что он не будет срабатывать для всех компонентов.Для этого сначала вам нужно предоставить уникальное имя компонента для каждого компонента, или вы можете использовать идентификатор.
data = [
{
id: 1,
name: 'Leanne Graham',
username: 'Bret',
email: 'Sincere@april.biz',
button: 'Button #1',
componentName:"component"+1
}
Шаг 2: Зарегистрируйте темы для каждого создания строки на основе componentNae.При каждом закрытии клика будет вызываться соответствующая подписка, а затем вы сможете удалить компонент отсюда
ngOnInit() {
this.renderValue = this.value.toString().toUpperCase();
this.InjiService.componentSubjects[this.rowData.componentName] = new Subject();
this.InjiService.componentSubjects[this.rowData.componentName].subscribe(()=>{
this.InjiService.removeComponent(this.expanededComp);
this.expanededComp = null;
//this.renderValue = this.value.toString().toUpperCase(); //"Open";
this.isOpen = false;
//firing the change detection manually
this.ref.markForCheck();
});
}
Пожалуйста, убедитесь, что вы объявили компоненты компонента в вашем сервисе
export class InjiService {
public componentSubjects: { [name: string]: Subject<any> } = {};
Рабочий образец