首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ngModelChange dispatchEvent

ngModelChange dispatchEvent
EN

Stack Overflow用户
提问于 2019-11-29 20:31:31
回答 2查看 260关注 0票数 1

我正在试着测试一个选择元素...

代码语言:javascript
复制
  <select [ngModel]="selectedRouters" name="routerName" class="form-control" id="routersSelect" size="12" (ngModelChange)="selectRouters($event)" multiple>
    <option [value]="router.name" *ngFor="let router of routers$ | orderBy : 'name'">
      {{router.name}}
    </option>
  </select>

该方法如下所示:

代码语言:javascript
复制
selectRouters(routers) {
    this.routers$
        .filter(router => routers.includes(router.name))
        .forEach(router => router.setSelected(true))

    this.routers$
        .filter(router => !routers.includes(router.name))
        .forEach(router => router.setSelected(false))
}

该方法需要string[],但我不知道如何测试它...

代码语言:javascript
复制
//before
component = fixture.componentInstance

//it
component.selectedRouters = Array.of(r.name);

let evt = document.createEvent('Event');
evt.initEvent('ngModelChange');

selector.dispatchEvent(evt);

// also tried

selector.dispatchEvent(new CustomEvent('ngModelChange') {
  detail: ["arg1"]
})

但是参数是使用事件类型调用的,而不是string[],这会在代码中抛出错误。

有没有人知道怎么做,或者如何测试被选中的选择元素?

EN

回答 2

Stack Overflow用户

发布于 2019-11-29 20:45:22

您可以通过更改HTML [(ngModel)]="selectedRouters(ngModelChange)="selectRouters(selectedRouters)"来进行检查,如下所示

代码语言:javascript
复制
<select [(ngModel)]="selectedRouters" name="routerName" class="form-control" id="routersSelect" size="12" (ngModelChange)="selectRouters(selectedRouters)" multiple>
    <option [value]="router.name" *ngFor="let router of routers$ | orderBy : 'name'">
      {{router.name}}
    </option>
  </select>

您可以像在HTML Page中那样做,只需更改组件代码,如下所示

HTML页面中的

代码语言:javascript
复制
  <select [ngModel]="selectedRouters" name="routerName" class="form-control" id="routersSelect" size="12" (ngModelChange)="selectRouters($event)" multiple>
    <option [value]="router.name" *ngFor="let router of routers$ | orderBy : 'name'">
      {{router.name}}
    </option>
  </select>

组件页中的

代码语言:javascript
复制
    selectRouters(event) {
    this.routers$
        .filter(router => routers.includes(event.target.value.toString()))
        .forEach(router => router.setSelected(true))

    this.routers$
        .filter(router => !routers.includes(event.target.value.toString()))
        .forEach(router => router.setSelected(false))
}
票数 1
EN

Stack Overflow用户

发布于 2019-11-30 13:09:46

您可以遵循this代码来解决您的问题。希望这能有所帮助!谢谢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59104878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档