【发布时间】:2018-06-08 15:25:04
【问题描述】:
我有一个带有条件类的组件。同级组件有一个单击事件,该事件将true 传递给服务函数。该函数已触发,但兄弟中的值未更新以激活该类:
html:
<div class="location-details flyout" ng-class="{'active': flyoutState}">
...
</div>
flyout.component.ts:
import { Component, OnInit, AfterViewInit } from '@angular/core';
import { FlyoutService } from './flyout.service';
@Component({
selector: 'app-flyout',
templateUrl: './flyout.component.html',
styleUrls: ['./flyout.component.scss']
})
export class FlyoutComponent implements OnInit, AfterViewInit {
flyoutState: Boolean;
constructor(private flyoutservice: FlyoutService) {}
ngOnInit() {
}
ngAfterViewInit(){
this.flyoutservice.flyoutActive.subscribe(flyoutState => this.flyoutState = flyoutState);
...
}
}
map.component.ts:
import { Component, OnInit, AfterViewInit } from '@angular/core';
import { FlyoutService } from '../flyout/flyout.service';
@Component({
selector: 'app-map',
templateUrl: './map.component.html',
styleUrls: ['./map.component.scss']
})
export class MapComponent implements OnInit, AfterViewInit {
flyoutState: Boolean;
constructor(private flyoutservice: FlyoutService) {
}
ngOnInit() {
}
ngAfterViewInit() {
this.flyoutservice.flyoutActive.subscribe(flyoutState => this.flyoutState = flyoutState);
let mapFlyoutService = this.flyoutservice;
function stationClick(l, i, s) {
/*
console.log(l); // locaiton
console.log(i); // id
console.log(s); // siblings w/ data
*/
mapFlyoutService.changeFlyoutState(!this.flyoutActive);
}
}
}
flyout.service.ts:
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
@Injectable()
export class FlyoutService {
private flyoutState = new BehaviorSubject(false);
flyoutActive = this.flyoutState.asObservable();
constructor() { }
changeFlyoutState(flyoutState: Boolean) {
this.flyoutState.next(flyoutState);
console.log(flyoutState);
}
}
请注意,如果我不这样做let mapFlyoutService = this.flyoutservice; 并在stationClick() 函数中使用this.flyoutservice,它会说flyoutservice 未定义。不确定myFlyoutService 是否是问题所在。
你会注意到我试图用这个mapFlyoutService.changeFlyoutState(!this.flyoutActive); 来翻转真/假之间的值,但它总是记录true,这意味着false 的初始状态永远不会更新。
此外,该类永远不会被添加。该函数应该“打开和关闭”类,但没有效果。
【问题讨论】:
标签: angular rxjs angular2-services