加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – Angular 2选择组件集初始选择

发布时间:2020-12-17 17:21:41 所属栏目:安全 来源:网络整理
导读:我正在尝试使用ngModel在Angular 2中创建一个选择组件包装器.一旦选择被更改,事件都会正确触发,但我无法在渲染时设置初始选择. 这是我的组成部分: @Component({selector: 'my-dropdown',inputs: ['selectedItem','items','label'],outputs: ['selectedItemC
我正在尝试使用ngModel在Angular 2中创建一个选择组件包装器.一旦选择被更改,事件都会正确触发,但我无法在渲染时设置初始选择.

这是我的组成部分:

@Component({
selector: 'my-dropdown',inputs: ['selectedItem','items','label'],outputs: ['selectedItemChange'],template: `
<div class="field">
  <label>{{label}}</label>
    <select class="ui search selection dropdown" [ngModel]="selectedItem" (change)="onChange($event.target.value)">
      <option value="" selected>Please Select</option>
      <option *ngFor="#item of items" [value]="item.value">{{item.label}}</option>
    </select>
</div>`
})

export class MyDropdownComponent {

items: DropdownValue[];
selectedItem: DropdownValue;
selectedItemChange: EventEmitter<any> = new EventEmitter();

private onChange(newValue) {

    console.log(newValue);
    this.selectedItem = this.items.find(item => item.value == newValue);
    console.log(this.selectedItem);
    this.selectedItemChange.emit(newValue);
}
}

我在这个视图中使用它:

<my-dropdown [items]="selectItems" [(selectedItem)]="itemToSelect" [label]="'Please Select'"></my-dropdown>

当我在init上的父组件中设置itemToSelect值时,它不会在UI中设置所选的选项值.

我还尝试使用ngModelChange事件,但它不会触发更改事件.

解决方法

itemToSelect最初设置为一个对象,因此MyDropdownComponent的输入属性最初设置为一个对象.但是在onChange()中,一个字符串值是emit()ted,然后将itemToSelect设置为一个字符串,因此输入属性变为一个字符串.不好.

只是始终如一地使用一个对象,它将工作.此外,不需要在onChange()中分配this.selectedItem,因为所选的值将从父级传播回来(通常,您不应该在组件中设置输入属性 – 它看起来也很奇怪).您现在也可以使用ngModelChange:

<select class="ui search selection dropdown" [ngModel]="selectedItem.value"
 (ngModelChange)="onChange($event)">

private onChange(newValue) {
    console.log('nv',newValue);
    selectedItem = this.items.find(item => item.value == newValue);
    console.log('si',selectedItem);
    this.selectedItemChange.emit(selectedItem);
  }
}

Plunker

请注意,我没有解决用户选择“请选择”的问题.你需要在onChange()中添加一些逻辑来处理这种情况.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读