如果绑定属性或表达式失败,是否有办法记录?
i.e.
<input type="text" ng-model="user.name" />
当用户或名称未定义时记录?
Edit:对于如何发生这种情况似乎存在很多困惑。假设我对多个视图使用视图模型(或者我很健忘)
想象一下,我更改了 JS 代码,以便名称现在为 user.firstName,但我忘记更新我的视图。我希望在运行时记录它,以便我可以修复它。
正如其他人在评论中提到的,当属性未在范围中定义时,数据绑定本身不会“失败”,但会在范围上透明地创建该属性。
如果您希望在未找到名称时有一些通知行为,您可以通过装饰 ng-model 指令来手动获取它,以检查其值在插入 DOM 时是否在作用域上定义。
.config(['$provide', function($provide) {
$provide.decorator('ngModelDirective', ['$delegate', function($delegate){
var directive = $delegate[0];
// Save the old link function
var link = directive.link;
directive.compile = function() {
return function(scope, element, attrs) {
link.apply(this, arguments);
// Now that we've applied the old link function, we can add
// any extra checks or steps we want
if (!objHasProperty(scope, attrs.ngModel)) {
alert("using ng-model value '" + attrs.ngModel +"' that wasn't defined first!"
}
};
};
return $delegate;
}]);
}])
这将检查控制器范围内 ng-model 值的定义,如果未设置则发出警报。
看一个工作jsfiddle这可能会如何记录拼写错误。
我还没有在每个场景中对此进行测试或考虑过,所以它可能真的在某个地方被破坏了......我也不确定它将如何处理查找在父级范围中定义的属性。
另请参阅这篇不错的博文有关装饰指令的更多信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)