ngIf가 관찰 결과를 선택하는 데 약간의 문제가 있습니다. 두 가지 구성 요소가 있는데 하나의 구성 요소가 다른 구성 요소에 콘텐츠를 표시하거나 표시하지 않게하려고합니다.Ng가 관찰 가능과 함께 작동하지 않습니다.
filterComponent.ts
import { Component, OnInit } from '@angular/core';
import{Observable } from "rxjs";
import {FilterDataService} from "./filter-data.service";
import {FormsModule} from "@angular/forms";
@Component({
selector: 'app-filter',
templateUrl: './filter.component.html',
styleUrls: ['./filter.component.css']
})
export class FilterComponent implements OnInit {
show: boolean;
constructor(private filterData: FilterDataService) { }
ngOnInit() {
this.filterData.currentSource.subscribe(show => this.show =show);
this.changeShowFlag(true);
console.log('Filter Show is ' + this.show);
}
changeShowFlag(showFlag:boolean) {
this.filterData.changeSource(showFlag);
console.log("current show value " + showFlag);
console.log("value of show confirmed as "+ this.show);
console.log("value in service for source " + this.filterData.source);
}
}
filterComponent.html
<p>
filter works!
</p>
<div class ="toggles">
<div class="toggle-border">
<input [(ngModel)]="show"
(click)="changeShowFlag(!show);" type="checkbox" id="one" />
<label for="one">
<div class="artHandle"></div>
</label>
</div>
</div>
filterDataService.ts
import { Injectable } from '@angular/core';
import {BehaviorSubject} from "rxjs/BehaviorSubject";
@Injectable()
export class FilterDataService {
private _Source = new BehaviorSubject<boolean>(true);
public source:boolean = true;
currentSource = this._Source.asObservable();
constructor() { }
changeSource(sourceFlag: boolean) {
this._Source.next(sourceFlag);
this.source = sourceFlag;
}
}
consumerComponet.ts
consumerComponent.html
<p>
consumer works!
</p>
<div *ngIf="source" >
show is on
</div>
내가 슬라이더 클릭하면
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { FilterComponent } from './filter/filter.component';
import { ConsumerComponent } from './consumer/consumer.component';
import {FilterDataService} from "./filter/filter-data.service";
import {FormsModule} from "@angular/forms";
@NgModule({
declarations: [
AppComponent,
FilterComponent,
ConsumerComponent
],
imports: [
BrowserModule,
FormsModule
],
providers: [FilterDataService],
bootstrap: [AppComponent]
})
export class AppModule { }
는 app.component.html
<div>
<app-filter></app-filter>
</div>
<div>
<app-consumer></app-consumer>
</div>
지금 값이 변경되어 app.modules.ts 가치가 변했지만, ngif를 사용하는 소비자 구성 요소가 어떤 이유로 온/오프 토글을하지 않는다는 것을 알기를 기대하면서 콘솔 출력을 얻습니다. 내가 기대했던 것처럼. 나는 뭔가를 빠뜨린 것 같고 아마도 매우 쉬운 해결책이긴하지만 일주일 동안 해결책을 찾고 있었고 나는이 질문을 게시 할 것이라고 생각했다. 누군가 내가 잘못 가고있는 조언을 할 수 있는지 알아보기. 모든 조언과 도움에 미리 감사드립니다. 이 같은
우리가 작업 할 수있는 플 런커를 만들 수 있습니다. 또는 (소비자와 같은) 더 많은 로그 문을 추가하고 문제가 어디에 위치하는지 확인할 수 있습니다. – DeborahK
어디서 관찰 할 수 있습니까? – Ced
코드가 잘 작동합니다 [Plunkr] (https://plnkr.co/edit/SjhNK4flB53I2bB8ywDh). –