Angular 2语义UI下拉JS无法正常工作

时间:2016-03-03 08:07:33

标签: angular semantic-ui

我正在尝试使用Semantic UI在Angular 2中创建通用下拉控件。我有以下代码:

android.permission.SYSTEM_ALERT_WINDOW

这实际上工作得很好(没有Semantic UI JS样式),问题是,一旦我取消注释行import {ElementRef, Component, OnInit, EventEmitter} from "angular2/core"; import {DropdownValue} from "./dropdown-value"; declare var jQuery: any; @Component({ selector: 'my-dropdown', inputs: ['selectedItem', 'items', 'label'], outputs: ['selectedItemChange'], template: ` <div class="field"> <label>{{label}}</label> <select class="ui selection dropdown" [ngModel]="selectedItem.value" (ngModelChange)="onChange($event)"> <!--<option value="" selected>Please Select</option>--> <option *ngFor="#item of items" [value]="item.value">{{item.label}}</option> </select> </div>` }) export class MyDropdownComponent implements OnInit { items: DropdownValue[]; selectedItem: DropdownValue; selectedItemChange: EventEmitter<any> = new EventEmitter(); constructor(private elementRef: ElementRef) { } ngOnInit(): any { this.items.unshift(new DropdownValue('', 'Please Select')); this.selectedItem = this.selectedItem || this.items[0]; //jQuery(this.elementRef.nativeElement).find('select').dropdown(); } onChange(newValue) { let selectedItem = this.items.find(item => item.value == newValue); this.selectedItemChange.emit(selectedItem); } } ,请选择&#39;不再可见,并且不显示初始选择。

2 个答案:

答案 0 :(得分:4)

正如Günter所说,你应该在ngAfterViewInit()中调用jQuery().dropdown()

dropdown()重置所选值。所以你必须在dropdown()之后重新选择所需的值:

ngAfterViewInit(){
  jQuery(this.elementRef.nativeElement).find('select').dropdown({allowTab:false});
  jQuery(this.elementRef.nativeElement).find('select').dropdown("set selected",this.selectedItem.value);
}

请参阅plunkr

答案 1 :(得分:3)

使用

setTimeout(() => 
  jQuery(this.elementRef.nativeElement).find('select').dropdown();
}, 1); 

给Angular一些空气 - 更新视图以显示this.items.unshift

或使用ngAfterViewInit()。这样它就可以在没有setTimeout()

的情况下工作
ngAfterViewInit() {
  jQuery(this.elementRef.nativeElement).find('select').dropdown();
}