Angular 1.5 получить стоимость услуги, используя тему - PullRequest
0 голосов
/ 09 июля 2020

Я использую angularjs версию 1.5, цель - использовать компонент для прослушивания обновлений службы.

myService.ts

export class myService {
   private _myBoolean: Subject<boolean>

  constructor() {
   this._myBoolean = new Subject<boolean>();
  }
   //  
  public get myBoolean(): Observable<boolean>{
    return this._myBoolean;
  }

  public set myBoolean(value: Observable<boolean>) {
   this._myBoolean.onNext(true)
  }

}

Я хочу прослушивать логическое обновление из службы myComponent

export class myComponent ContextComponent {
  public updatedBoolean;

  $inject: string[] = [myService]

  this.updatedBoolean = this.myService.myBoolean   <--- I need to subscribe to the service
}

Я пытаюсь работать с angularJS, чтобы подписаться на входящие обновления от службы для обновления моей переменной компонента.

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

Вы не можете просто привязать Subject к переменной в вашем компоненте и ожидать, что angularjs обработает его автоматически. В отличие от более современного Angular, в angularjs есть концепция цикла дайджеста, цикл дайджеста влияет на то, когда изменения области видимости применяются к DOM. Это одна из причин, по которой angularjs не использует собственный Promise, служба $q реализует особый тип обещания, который интегрирован в цикл дайджеста angularjs. Поскольку SubjectObservable в целом) отправляет angularjs и нет прямого эквивалента, который подключается к циклу дайджеста , вы несете ответственность за работу с Observable и сообщение angularjs когда обрабатывать осциллограф.

Вот как это может выглядеть:

export class MyComponent implements ng.IComponentController {

    public static $inject: string[] = [
        '$scope',
        'myService'
    ];

    public updatedBoolean: boolean;

    constructor(private readonly $scope: ng.IScope,
                private readonly myService: MyService) { }

    $onInit() {
        this.myService.myBoolean.subscribe((value) => {
            this.updatedBoolean = value;
            this.$scope.$digest();
        });
    }

}

Примечание: я не знаком с ContextComponent, поэтому я переключился на использование "стандартные" angularjs типы (например, npm install @types/angular@1.5.x) для этого примера.

0 голосов
/ 09 июля 2020

Думаю, вам нужно подписаться:

this.updatedBoolean = this.myService.myBoolean.subscribe(newVal => { yourChanges...});
...