この例では、現在の状態がどんなものでもドロップダウンになるように状態をサブスクライブする方法を示します。最初に開きたい場合は、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 })
}
}
あなたが開くようにデフォルトしたいものを反映するためにあなたの質問を更新する必要があります。あなたは、このコントローラを開くために状態をデフォルト状態にしますか?そして、このコンポーネントは、初期化時にその状態を読み取るか?あなたの州のデフォルトを開くようにすることは、この選択をデフォルトで開くこととは異なります。あなたが求めていることについて具体的にしてください。 – Meeker
@Meeker私のユースケースを説明するために説明を更新しました。 –
あなたのシナリオ例では、誰かが何かをクリックするまでパネルが最初に閉じられていることが示唆されています。だから今これはもっと混乱している。 – Meeker