当前位置: 首页 > 知识库问答 >
问题:

如何在选择标签(Angular 2)上检测对ngModel的更改?

汤才捷
2023-03-14

我试图检测ngModel中的更改

完整示例:http://plnkr.co/edit/9c9oKH1tjDDb67zdKmr9?p=info

import {Component, View, Input, } from 'angular2/core';
import {FORM_DIRECTIVES} from 'angular2/common';

@Component({
    selector: 'my-dropdown'
})
@View({
    directives: [FORM_DIRECTIVES],
    template: `
        <select [ngModel]="selection" (ngModelChange)="onChange($event, selection)" >
            <option *ngFor="#option of options">{{option}}</option>
        </select>
        {{selection}}
    `
})
export class MyDropdown {
    @Input() options;

    selection = 'Dog';

    ngOnInit() {
        console.log('These were the options passed in: ' + this.options);
  }

  onChange(event) {
    if (this.selection === event) return;
    this.selection = event;
    console.log(this.selection);
  }

}

正如我们所看到的,如果我们从下拉列表中选择不同的值,我们的ngModel就会改变,视图中的插值表达式反映了这一点。

如何通知我的班级/管制员发生此变化?


共有2个答案

司马建柏
2023-03-14

我无意中发现了这个问题,我将提交我使用过且效果很好的答案。我有一个过滤和排列对象的搜索框,我在搜索框中使用了(ngModelChange)=“onChange($event)”

在我的. html

<input type="text" [(ngModel)]="searchText" (ngModelChange)="reSearch(newValue)" placeholder="Search">

然后在我的component.ts

reSearch(newValue: string) {
    //this.searchText would equal the new value
    //handle my filtering with the new value
}
马绪
2023-03-14

更新:

分离事件和属性绑定:

<select [ngModel]="selectedItem" (ngModelChange)="onChange($event)">
onChange(newValue) {
    console.log(newValue);
    this.selectedItem = newValue;  // don't forget to update the model here
    // ... do other stuff here ...
}

您也可以使用

<select [(ngModel)]="selectedItem" (ngModelChange)="onChange($event)">

然后您不必在事件处理程序中更新模型,但我相信这会导致两个事件触发,因此可能效率较低。

老答案,在他们修复beta版的bug之前。1:

创建本地模板变量并附加一个事件:

<select [(ngModel)]="selectedItem" #item (change)="onChange(item.value)">

柱塞

另请参阅如何在Angular 2中的“选择”中获得新选择?

 类似资料:
  • 我正在Eclipse中执行动态web项目 我在我的jsp页面中使用下拉列表 例如 但我需要为每个选项存储多个值,以便有任何解决方案。。?? 我需要如果用户选择第一个选项,我需要多个选项值 指-- 当用户选择该选项时,我需要4个不同的值,以便有任何解决方案,或者在jsp中有任何替代方案可用于执行该任务。。。??

  • 我试图使新值被选中后,调用eventChange()函数并将选中的值恢复为默认值。但会发生什么:ngModel值更新,但所选值保持不变。我应该如何使selected值和ngModel值相同? HTML文件 更新:以防万一的澄清:正在调用函数,但我想通过JavaScript更改所选选项。我尝试通过更改ngModel值来实现这一点,但即使ngModel值为cahnged时,所选选项也不会更改。

  • 问题内容: 我正在尝试从Material-UI 更改组件的边框。到目前为止,我已经尝试过: 我可以自定义等,但是许多小时后,我仍然无法自定义Select。我尝试也传递一个,但是您必须自定义,这甚至更糟。 有人可以帮我这个沙盒吗? https://codesandbox.io/s/material-demo- ecj1k 我真的很感激。 问题答案: 以下是为默认,悬停和聚焦状态覆盖边框(),标签()

  • 问题内容: HTML: CSS: 我希望基于“ for”属性选择标签以进行布局更改。 问题答案: 选择器将是,因此在CSS中: …或在使用DOM的JavaScript中: …或在JavaScript中使用jQuery: 这是一个属性选择器。请注意,某些浏览器(例如IE<8版本)可能不支持属性选择器,但较新的浏览器却支持。要支持IE6和IE7等较旧的浏览器,可悲的是,您必须使用一个类(很好,或采用其

  • 在JavaFX8中有没有让标签文本可选的方法?我知道,还有其他简单的变通方法,比如使用文本字段。但是我的标签需要带换行功能的多行文本,这是TextField所不提供的。如果我使用TextArea,问题是我不能像标签一样根据文本的大小缩小TextArea。所以我两个都不能用。 另外,我对标签文本的使用如下所示: 根据VBox的宽度,标签的高度会调整大小以完全适应文本。我不能使用TextArea或te

  • 我有一个要求,我需要将电话号码绑定到ngModel,只要它存在。我的代码如下: 如果电话号码存在,这很好,但如果不存在,我得到以下错误: 无法读取未定义的属性“full_number” 因此,基于这个SO帖子链接,我尝试了以下内容: 但是,这会导致语法错误。 未捕获错误:模板解析错误 解决此问题的一种方法是使用并再次重复代码集。但是,我应该做些什么来进行内联操作,比如三元条件检查?