在加载时为预先选中的复选框运行 ng-change 函数

Posted

技术标签:

【中文标题】在加载时为预先选中的复选框运行 ng-change 函数【英文标题】:Run ng-change functions on load for pre-checked checkboxes 【发布时间】:2016-08-03 12:25:41 【问题描述】:

我在 ng-change 中有一个函数,每次选中复选框时都会执行(手动)。

现在我想在加载时预先检查复选框,并且 ng-change 中的函数也可以执行(加载时)。

我可以采取哪些方法来实现这一目标?

【问题讨论】:

ng-init?你有没有尝试过? ng-init 是我尝试用来初始化函数的第一个指令;但是,没有返回预期的结果。想知道除了 ng-init 是否还有其他方法。 您没有使用控制器或指令吗?我不明白为什么不能直接从控制器初始化/指令链接上的 JS 调用您在 ng-change 中调用的函数。 ng-change="update()" -> scope.update(); // on controller 【参考方案1】:

你不需要这样做,你的模型会自动这样做,比如说

$scope.customer = 客户;

<input type='checkbox' ng-model='customer.active' /> Is Active

它会自动处理

【讨论】:

... 除了 OP,实际上可能需要调用 ngChange 中的方法,而您的解决方案并未涵盖。【参考方案2】:

如果你想要一个在加载和 onChange 事件期间触发的函数,你可以使用指令 ng-init

创建连接到您的作用域的 onLoad 和 onChange 函数:

$scope.onLoad = function(params) 
  // do some init functionality and call onChange functionality
  onChange();


$scope.onChange = function(value) 
  // do function when a combobox is chaned

html 模板中你必须绑定这些方法

<div ng-init="onLoad()">
  <input type='checkbox' ng-model='someModel' ng-change="('1')"/> Is one
  <input type='checkbox' ng-model='someModel' ng-change="('2')"/> Is two
  <input type='checkbox' ng-model='someModel' ng-change="('3')"/> Is three
</div>

【讨论】:

【参考方案3】:

ng-change 不会执行,除非用户更改了输入,如角度文档here 中所述。问题是您可以手动触发 ng-change,但通常不建议这样做,它被认为是 dirty way and terrible practice。添加观察者并检测对模型所做的任何更改会更合适。

$scope.$watch("myModel", function(newValue, oldValue)
    // do something
);

【讨论】:

有手动触发ng-change的例子吗?

以上是关于在加载时为预先选中的复选框运行 ng-change 函数的主要内容,如果未能解决你的问题,请参考以下文章

从 ng-change 上的选定复选框获取 ID

$event.target 的 AngularJS 复选框 ng-change 问题

要在表单中添加一个默认时为选中状态的复选框,应使用啥语句

PHP JQuery Checkbox - 如果复选框被预先选中,它不会在未选中时删除“选中”属性

javascript 预先选中一个复选框

如何在使用数据表加载页面时为所有行和列动态添加复选框?