2017-08-10 3 views
0

私は、Webページをデザインするために、Reduxと角度のある材料でangular4を使用しています。 md-selectパネルを開くように設定しようとしています。 シナリオの例:クリックボタンディスパッチアクションを実行して選択パネルを開き、すべてのオプションを表示します。md-selectパネルをデフォルトで開くように設定する方法

私はreduxアクションを使用してコンポーネントの状態を操作しています。だから、基本的に私は選択を開くためのアクションを開始する必要があります。

提案がありますか?

+0

あなたが開くようにデフォルトしたいものを反映するためにあなたの質問を更新する必要があります。あなたは、このコントローラを開くために状態をデフォルト状態にしますか?そして、このコンポーネントは、初期化時にその状態を読み取るか?あなたの州のデフォルトを開くようにすることは、この選択をデフォルトで開くこととは異なります。あなたが求めていることについて具体的にしてください。 – Meeker

+0

@Meeker私のユースケースを説明するために説明を更新しました。 –

+0

あなたのシナリオ例では、誰かが何かをクリックするまでパネルが最初に閉じられていることが示唆されています。だから今これはもっと混乱している。 – Meeker

答えて

3

この回答の出発点としてMaterial2の例を使用します。あなたがそれを行う方法は次のとおりです。

あなたのパネルにIDを付けます。 mySelect

<md-select placeholder="Favorite food" #mySelect> 
    <md-option *ngFor="let food of foods" [value]="food.value"> 
    {{ food.viewValue }} 
    </md-option> 
</md-select> 

...その後、あなたのコンポーネントクラスを変更します。ここ

import {Component, ViewChild, AfterViewInit } from '@angular/core'; 
import {MdSelect} from '@angular/material'; 

@Component({ 
    selector: 'select-overview-example', 
    templateUrl: 'select-overview-example.html', 
}) 
export class SelectOverviewExample implements AfterViewInit { 
    foods = [ 
    {value: 'steak-0', viewValue: 'Steak'}, 
    {value: 'pizza-1', viewValue: 'Pizza'}, 
    {value: 'tacos-2', viewValue: 'Tacos'} 
    ]; 

    @ViewChild('mySelect') mySelect: MdSelect; 

    ngAfterViewInit(){ 
     this.mySelect.open(); 
    } 
} 

Plunkerリンク:PLUNKER DEMO

+0

助けがあればマークを受け付けます:) – Faisal

+0

本当に有益です。しかし、コンポーネントの状態を操作するためにreduxアクションを使用しています。だから、基本的に私は選択を開くためのアクションを開始する必要があります。 –

+0

投稿に記載されていません:) – Faisal

1

この例では、現在の状態がどんなものでもドロップダウンになるように状態をサブスクライブする方法を示します。最初に開きたい場合は、initialStateをtrueに変更してください。

トグル状態のアクションをディスパッチしてドロップダウンを開くボタンがあります。

これを変更して、別々の開閉ボタンや必要なものを切り替えることができます。

state.ts

export interface AppState { 
    isDropDownOpen: boolean 
} 

const initialState: AppState = { 
    isDropDownOpen: false; 
}; 

export function appReducer(
    state: AppState = initialState, 
    action: any 
): AppState { 
    switch (action.type) { 
    case 'toggleSelect': { 
     state.isDropDownOpen = action.payload 
     return state; 
    } 
    default: { 
     return state; 
    } 
    } 
} 

私-component.ts

import {Component, ViewChild, AfterViewInit } from '@angular/core'; 
import {MdSelect} from '@angular/material'; 

@Component({ 
    selector: 'my-component', 
    template: ` 
    <md-select placeholder="Favorite food" #mySelect> 
     <md-option *ngFor="let food of foods" [value]="food.value"> 
     {{ food.viewValue }} 
     </md-option> 
    </md-select> 
    <button (click)="openSelect()"> Open Select </button> 
`, 
}) 
export class SelectOverviewExample implements AfterViewInit { 
    foods = [ 
    {value: 'steak-0', viewValue: 'Steak'}, 
    {value: 'pizza-1', viewValue: 'Pizza'}, 
    {value: 'tacos-2', viewValue: 'Tacos'} 
    ]; 

    @ViewChild('mySelect') mySelect: MdSelect; 

    controller(private store: Store<AppState>){ 
    store.select(state => state.isDropDownOpen).subscribe(isDropDownOpen => { 
     if(isDropDownOpen){ 
     this.mySelect.open() 
     } else { 
     this.mySelect.close() 
     } 
    }) 
    } 

    openSelect(){ 
    this.store.dispatch({ type: toggleSelect, payload: true }) 
    } 

} 
関連する問題