【问题标题】:AngularJs ng-change event fire manuallyAngularJs ng-change 事件手动触发
【发布时间】:2016-04-19 07:05:17
【问题描述】:
 <input type="checkbox" value="" ng-model="filterPrivateDocCheckBox" ng-click="dl.filterPrivateDocument(filterPrivateDocCheckBox, $event)">
 <input st-search="target" class="input-sm form-control"  ng-model="dl.documentTarget" ng-change="dl.change()" />

function filterPrivateDocument(val) 
{
    if(val)
    this.documentTarget = 'Private';
}

当我单击复选框时,我将值设置到文本框中,但我看到 ng-change 事件没有被触发。为什么?

当我在文本框中输入一些值时,我观察到ng-change 事件被触发。

有解决这个问题的办法吗?

【问题讨论】:

  • 你能提供一个 jsFiddle/Plunker 来重现问题吗?
  • 那么您的问题是什么?您在此处定义的内容是您的代码应该如何工作。究竟想成为什么?
  • 什么浏览器???

标签: angularjs onchange angularjs-ng-change


【解决方案1】:

根据the docs

ngChange 表达式仅在输入值的更改导致新值提交给模型时才被评估。

它不会被评估:

  • 如果从 $parsers 转换管道返回的值有 没有改变
  • 如果输入自模型以来一直无效 将保持为空
  • 如果模型以编程方式而不是由 更改为输入值

所以当它被JavaScript(/angular)改变时不会被触发。

你能做的,就是自己触发change函数:

function filterPrivateDocument(val) {
    if(val) {
        this.documentTarget = 'Private';
        this.change();
    }
}

this jsfiddle

【讨论】:

  • 感谢您以粗体突出显示的评论 3
  • 奇怪的是,第三点正是我正在发生的事情。不知道为什么,但更新控制器中的值又会触发 ngChange stackoverflow.com/questions/46002276/…
猜你喜欢
  • 1970-01-01
  • 2014-12-04
  • 1970-01-01
  • 1970-01-01
  • 2016-12-09
  • 2021-02-10
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多