我是 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/