2017-04-17 76 views
0

我正在處理Angular 2項目。我創建了一個下拉組件,如下所示:從自定義下拉組件獲取選定的值

@Component({ 
    selector: 'dropdown', 
    template: ` <div class="row" > 
        <div class="col-sm-3"> 
    <select class="form-control" placeholder="--select--" > 
     <option 
     *ngFor="let value of values" (click)="selectItem(value.value)">{{value.text}}</option> 
    </select> 
</div> 
</div>` 
}) 

export class DropdownComponent { 
    @Input() 
    values: Array<DropdownValue>; 

    @Output() 
    select: EventEmitter<any>; 

    constructor() { 
     this.select = new EventEmitter(); 
     this.values = new Array<DropdownValue>(); 
    } 

    selectItem(value) { 
     this.select.emit(value); 
    } 
} 

,並在我的其他組件

<dropdown [values]="categories" (select)="onselect($event)"></dropdown> 

使用,但我沒能訪問組件類我的下拉列表中選定的值。

如果我使用<u><li>下拉創建,它會遇到方法onselect(),但我想使用<select><option>...創建下拉列表 - 有沒有什麼方法可以訪問選定的值?

export class AssetComponent 
{ 
    public categories: DropdownValue[] = [ 
     { "value": 1, "text": "Table" }, 
     { "value": 2, "text": "Chair" }, 
     { "value": 3, "text": "Light" } 
    ]; 
    public isCollapsedContent: boolean = false; 

    searchfilter(): void { 
     this.isCollapsedContent = !this.isCollapsedContent; 
     console.log("collapsed happen"); 
    } 
    onselect(value:any): void 
    { 
     console.log(value) 
    } 
} 

我要訪問按鈕的下拉的價值點擊

<button type="button" class="btn btn-primary" (click)="searchfilter()"> 
    Search here 
</button> 
+0

您事件是否被觸發?因爲我建議請添加模型到您的選擇和'ngModelChange'嘗試發出您的事件不要做它在選項點擊 –

+0

,但它會給我下拉文本什麼,如果我想訪問價值 – user19041992

+0

你是什麼意思下拉文字? –

回答

1

您需要使用select元素的change事件:

<select (change)="onSelect($event.target.value)" class="form-control" placeholder="--select--" > 

獲取選中的值轉換的方法,並將該值發送到@Output財產:

onSelect(val) { 
    this.select.emit(val) 
} 

現在你可以從下拉列表組件中選定值:

<dropdown [values]="categories" (select)="onselect($event)"></dropdown> 

不要忘了導入從@angular/coreOutput,包括輸出屬性的組件:

@Output select 
+0

我已經試過這個,但它給出了下拉的文本值如果我想要訪問它的值字段 – user19041992

+0

您的選項中沒有值字段。添加值=「{{value.value}}」,你應該得到它的值而不是文本。 – unitario

+0

@ user19041992它解決了您的問題嗎? – unitario