是否会记录?
即。
<input type="text" ng-model="user.name" />
未定义用户或名称时记录?
修改 对于如何发生这种情况似乎存在很多困惑。让我们假设我使用viewmodel进行多个视图(或者我非常健忘)
想象一下,我更改了JS代码,以便名称现在是user.firstName,我忘了更新我的视图。我想在运行时记录它,以便我可以解决它。
答案 0 :(得分:1)
正如其他人在评论中提到的那样,当范围中没有定义属性时,数据绑定本身不会“失败”,但会透明地在范围上创建该属性。
如果在找不到名称时需要一些通知行为,可以通过修改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。
另外,有关装饰指令的更多信息,请参阅this nice blog post。