Родительский вид Angular 2 не обновляется после заметного изменения

#angular #rxjs #angular2-template #angular2-services #angular2-observables

#angular #rxjs #angular2-шаблон #angular2-services #angular2-наблюдаемые #angular2-сервисы

Вопрос:

У меня есть наблюдаемый сервис, который я использую для координации данных между компонентами. В этом случае я пытаюсь использовать его для управления тем, какие компоненты / html должны быть видны одновременно.

Когда я устанавливаю значение true для объекта поведения, на который подписывается родительский компонент, он успешно отображает дочерний компонент (transform-addedit). Однако, когда я обновляю члена службы, который управляет этим (mapAddingTransformSubj) из дочернего компонента, представление не переключается обратно, даже если я подписался в родительском. Я подтвердил, что родительский элемент правильно получает значение наблюдаемого.

Если кто-нибудь может предложить лучший способ сделать это, я был бы благодарен!

Родительский компонент html:

 <div class="container-fluid custom-container">
    <div *ngIf="!addingTransform">
        //Some html
         <button class="btn btn-default" (click)="addNewTransform()"><span class="glyphicon glyphicon-plus"></span> Add New Transformation</button>
    </div>
   <div *ngIf="addingTransform">
       <transform-addedit></transform-addedit>
   </div>
</div>
  

Родительский компонент .ts:

     //Toggles whether or not to show the Transformation components
    public addingTransform: boolean;
    active: boolean = true;

    //Subscriptions for map create service
    addingTransformSubscription: Subscription;

    //Sets the visible component to the transform add/edit component
    addNewTransform() {
        this.mapAddEditService.setAddingTransform(true);    
    }

    constructor(private _dataService: DataService, private mapAddEditService: MapAddEditService) {
        this.addingTransformSubscription = this.mapAddEditService.getAddingTransform().subscribe(addingTransform => this.addingTransform = addingTransform);
    }
    ngOnInit(): void {
    }
    ngOnDestroy(): void {
    }
}
  

Дочерний компонент .ts:

     cancelTransform() {
        this.mapAddEditService.setAddingTransform(false);
    }

    constructor(private _dataService: DataService, private mapAddEditService: MapAddEditService) {
    }
    ngOnInit(): void {
    }
  

Часть моего сервиса:

 @Injectable()
export class MapAddEditService {
    private mapAddingTransformSubj = new BehaviorSubject(false);

    setAddingTransform(addingTransform: boolean) {
        this.mapAddingTransformSubj.next(addingTransform);
    }
    getAddingTransform() {
        return this.mapAddingTransformSubj.asObservable();
    }
  

Ответ №1:

Просто решил это, и это была своего рода глупая проблема

Я понял, что ngIf проверяет инициализацию, поэтому привязка к [скрытому] в каждом из html-разделов родительского компонента вместо свойства ngIf устранила мою проблему.