0

所以我試圖切換單獨的組件中的一個元素,同時觸發該功能來改變離子選項卡組件中的布爾值到目前爲止,我有這個。使用服務切換ngIf與單獨的組件?

//App.module.ts - 減少爲簡潔

import { AppGlobals } from './globals'; 

@NgModule({ 
    providers: [AppGlobals] 
}) 

//Globals.ts着想

import { Injectable } from '@angular/core'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/share'; 
import 'rxjs/add/operator/startWith'; 
import { BehaviorSubject } from 'rxjs/BehaviorSubject'; 

@Injectable() 
export class AppGlobals { 
    // use this property for property binding 
    public showSearch:BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false); 

    setShowSearch(search){ 
     this.showSearch.next(search); 
     console.log(search); 
    } 
} 

// Tabs.ts

import { AppGlobals } from '../../app/globals'; 

constructor(private _appGlobals: AppGlobals) { 
    this._appGlobals.showSearch.subscribe(value => this.search = value); 
} 

toggleSearch() { 
    this.search = !this.search; 
    console.log(this.search); 
} 

//Tabs.html

(ionSelect)="toggleSearch();" 

//這是對某些HTML的單獨組件

<div *ngIf="search" [ngClass]="{'slideInRight':showSearch, 'fadeOut':!showSearch}" class="search-filters animated"> 

內然而,這似乎並沒有被工作,我切換值但全球「showSearch」似乎保持不變。在兩個組件之間實現元素切換的正確方法是什麼?

任何幫助都是非常讚賞。

+0

@VladuIonut不會出現有所作爲不幸 – Alsh

回答

0

Tabs.ts將發出一個事件時toggleSearch()方法調用

toggleSearch() { 
    this.search = !this.search; 
    console.log(this.search); 
    this._appGlobals.showSearch.next(this.search); 
} 

在另一個組件

import { AppGlobals } from 'path/to/app/globals'; 
@Component({...}) 
export class SubComponent implements OnInit { 

    showSearch: boolean = false; 

    constructor(private _appGlobals: AppGlobals) { 

    } 

    ngOnInit() { 
     this._appGlobals.showSearch.subscribe(value => this.showSearch = value); 
    } 

} 

子模板

<div *ngIf="showSearch">content</div> 
+0

謝謝,這幾乎奏效。現在看來這個元素正在顯示,但又立即隱藏起來。有任何想法嗎?我已經將其餘的html添加到了我的問題中。 – Alsh

+0

劃痕,我解決它,似乎我需要使所有搜索在HTML而不是showSearch。非常感謝您的幫助。 – Alsh

+0

不客氣。 –