我有一个带有条件类的组件。兄弟组件具有将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;
并在this.flyoutservice
函数中使用stationClick()
,则表示flyoutservice
未定义。不确定myFlyoutService
是否是问题。
你会注意到我试图在mapFlyoutService.changeFlyoutState(!this.flyoutActive);
之间翻转true / false之间的值,但它总是记录true
,这意味着false
的初始状态永远不会更新。
此外,该课程永远不会被添加。该函数应该“打开和关闭”类,但是没有效果。
答案 0 :(得分:2)
stationClick(l, i, s) => {
/*
console.log(l); // locaiton
console.log(i); // id
console.log(s); // siblings w/ data
*/
this.flyoutservice.changeFlyoutState(!this.flyoutActive);
}
使用es6编写函数的方式,当使用this
时,它将保留范围,在函数内部获得window
范围而不是component
范围。窗口没有任何flyoutActive
属性。所以!undefined
总是true
。这也是this.flyoutservice
为undefined
的原因。
答案 1 :(得分:0)
ng-class
是AngularJS风格
使用ngClass
代替
还要避免调用可能会改变AfterViewInit钩子中的UI的函数