angularjs - 在 Angular.js 中以编程方式设置模型值

标签 angularjs forms angularjs-directive angular-ngmodel

我是 angular-input-modified 的作者指令。

该指令用于跟踪模型的值并允许检查值是否被修改,还提供了reset() 函数将值更改回初始状态。

现在,模型的初始值存储在 ngModelController.masterValue 属性中,并提供了 ngModelController.reset() 函数。请看the implementation .

我正在使用以下语句:eval('$scope.' + modelPath + '= modelCtrl.masterValue;'); 以便将值恢复到初始状态。 modelPath 这里其实是ng-model属性的一个值。这是以前开发的,我不喜欢这种方法,因为 ng-model 值可能很复杂,而且嵌套范围会破坏此功能。

重构此语句的最佳方法是什么?如何通过 ngModel Controller 的接口(interface)直接更新模型的值?

最佳答案

到目前为止,我找到的最佳解决方案是使用 $parse服务以便解析 Angular 在 ng-model 属性中的表达式并为其检索 setter 函数。然后我们可以通过使用新值调用此 setter 函数来更改模型的值。

示例:

function reset () {
  var modelValueSetter = $parse(attrs.ngModel).assign;
  modelValueSetter($scope, 'Some new value');
}

这比 eval() 更可靠。


如果您有更好的想法,请提供其他答案或仅评论此答案。谢谢!

关于angularjs - 在 Angular.js 中以编程方式设置模型值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35309114/

相关文章:

javascript - ui-router 中嵌套 ui-view 的默认状态

javascript - 在其他 javascript 框架模板中运行 Angular 指令

angularjs - 为什么在 Angular 中使用 ng-src 时必须使用表达式?

javascript - 从指令调用 Angular Controller 函数

php - 如何隐藏html表单中的文本字段

javascript - Jquery 添加总和不会发生在动态创建的内容中

javascript - 如何将 AngularJS ng-repeat 变量传递给 Javascript 点击事件

javascript - 如何在 ng-include 中访问 ng-repeat 的 $parent

html - 一个 HTML 标签和两个表单输入

javascript - Angucomplete Alt url 远程