如果绑定的属性或表达式失败,是否有记录?
IE
<input type="text" ng-model="user.name" />
未定义用户或名称时记录?
编辑: 这似乎是如何发生的很多困惑。假设我对多个视图使用视图模型(或者我很健忘)
想象一下我更改了 JS 代码,以便名称现在是 user.firstName 并且我忘记更新我的视图。我想在运行时记录它,以便修复它。
如果绑定的属性或表达式失败,是否有记录?
IE
<input type="text" ng-model="user.name" />
未定义用户或名称时记录?
编辑: 这似乎是如何发生的很多困惑。假设我对多个视图使用视图模型(或者我很健忘)
想象一下我更改了 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 。
我没有在每个场景中测试或考虑过这个,所以它可能真的在某个地方坏了......我也不确定它将如何处理查找在父范围内定义的 attrs。
此外,有关装饰指令的更多信息,请参阅这篇不错的博客文章。