use*_*149 4 typescript angular angular6
我已经尝试让 Angular 更新服务变量“open_popup”好几天了,但没有成功。
太长了;我想做的是,每当变量“open_popup”发生变化时,使其在组件上发生变化,也能够从组件函数中更改服务变量。
这是我到目前为止所尝试过的。
应用程序/src/app/audience-creator/shared/audience-creator.service.ts
import { Injectable } from "@angular/core";
import {Observable} from "rxjs/index";
import { of } from "rxjs/index";
@Injectable()
export class AudienceCreatorService {
constructor(private http: HttpClient) {}
public open_popup = false;
public toggleCreatorPopup() {
this.open_popup = !this.open_popup;
}
popupIsOpen(): Observable<any> {
return of(this.open_popup);
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序/src/app/audience-creator/audience-creator.component.ts
import {Stuff} from "@angular/core";
@Component({
selector: 'audience-creator',
templateUrl: 'audience-creator.html'
})
export class AudienceCreatorComponent implements AfterViewInit, OnInit {
public popup_is_open = false;
@Input()
audience_creator_service;
ngOnInit() {
this.audience_creator_service.popupIsOpen().subscribe(
popup_is_open => this.popup_is_open = popup_is_open
);
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序/src/app/audience-creator/audience-creator.html
--> {{ this.popup_is_open }} variable is always false.
Run Code Online (Sandbox Code Playgroud)
不起作用
{{ this.popup_is_open }}
Run Code Online (Sandbox Code Playgroud)
PS:只是尝试将函数直接破解到模板中并且它可以工作,所以我绑定组件变量的方式一定有问题?
{{ audience_creator_service.popupIsOpen().value }}
Run Code Online (Sandbox Code Playgroud)
@Injectable()
export class AudienceCreatorService {
constructor(private http: HttpClient) {}
public open_popup = false
private isOpen: BehaviorSubject<boolean> = new BehaviorSubject(false);
public toggleCreatorPopup() {
this.open_popup = !this.open_popup;
this.isOpen.next(this.open_popup);
}
popupIsOpen(): Observable<any> {
return this.isOpen.asObservable();
}
}
Run Code Online (Sandbox Code Playgroud)