Ошибка: невозможно вызвать выражение, тип которого не имеет подписи вызова.(BehaviorSubject) - PullRequest
1 голос
/ 21 мая 2019

Я могу предоставить фиктивное приложение, которое демонстрирует это, но оно сводится к следующему: Сервисный файл: dialog.service.ts

import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';

@Injectable()
export class DialogService  {
  public TriggerDlgAction: BehaviorSubject<boolean>;

  constructor() {
    this.TriggerDlgAction = new BehaviorSubject<boolean>(false); // initialize
  }
}

app.component.ts

import { Component, OnInit } from '@angular/core';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import { DialogService } from './dialog.service';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit { 
  triggerValue: boolean = false;

  constructor(private dlgSvc: DialogService ) {

  }
  ngOnInit() {
    this.dlgSvc.TriggerDlgAction.subscribe(
      (doTrigger) => {
        this.triggerValue = doTrigger;
        console.log(this.triggerValue);
      }
    )
  } 
}

И client.component.ts (модуль которого импортирован в app.module.ts.

import { Component } from '@angular/core';
import { DialogService } from '../dialog.service';

@Component({
  selector: 'app-client',
  templateUrl: './client.component.html',
  styleUrls: ['./client.component.css']
})
export class ClientComponent {

  constructor(protected dlgSvc: DialogService) { }

  RequestAppFunction() {
    this.dlgSvc.TriggerDlgAction<boolean>(true);
  }
}

И ошибка, которую я не понимаю: enter image description here

Заранее спасибо,: -)

1 Ответ

2 голосов
/ 22 мая 2019

Я думаю, что проблема возникает из-за того, что вы пытаетесь позвонить просто с помощью true, поскольку субъект поведения не ожидал, что его так вызовут.

Субъекты поведения должны вызываться с next() и значением, передаваемым здесь, чтобы заставить их излучать своих подписчиков.

Попробуйте изменить следующий код.

import { Component } from '@angular/core';
import { DialogService } from '../dialog.service';

@Component({
  selector: 'app-client',
  templateUrl: './client.component.html',
  styleUrls: ['./client.component.css']
})
export class ClientComponent {

  constructor(protected dlgSvc: DialogService) { }

  RequestAppFunction() {
    this.dlgSvc.TriggerDlgAction.next(true);
                               ^^^^^^^^^
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...