Angularjs 可以记录角度数据绑定错误吗?
如果绑定属性或表达式失败,是否仍要记录日志 i、 eAngularjs 可以记录角度数据绑定错误吗?,angularjs,Angularjs,如果绑定属性或表达式失败,是否仍要记录日志 i、 e 未定义用户名或名称时记录日志 编辑: 关于这是如何发生的,似乎有很多困惑。假设我对多个视图使用viewmodel(或者我很健忘) 想象一下,我更改了JS代码,因此名称现在是user.firstName,而我忘记了更新视图。我希望在运行时将其记录下来,以便修复它。正如其他人在评论中提到的那样,当属性未在作用域中定义时,数据绑定本身不会“失败”,但会在作用域上透明地创建该属性 如果您希望在找不到名称时有一些通知行为,可以通过修饰ng mode
未定义用户名或名称时记录日志
编辑:
关于这是如何发生的,似乎有很多困惑。假设我对多个视图使用viewmodel(或者我很健忘)
想象一下,我更改了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模型值的定义,如果未设置,则发出警报
请参阅有关如何记录打字错误的工作
我还没有测试过这一点,也没有考虑过每一个场景,所以它可能真的在某个地方坏了。。。我也不确定它将如何处理查找父范围中定义的属性的问题
另外,有关装饰指令的更多信息,请参阅。您应该确保您的数据在控制器中有效。我想知道变量名是否在视图和控制器/作用域之间不同步。怎么会发生这种情况?ng模型将在当前作用域中创建一个新属性,如果属性(user.name)在其关联的控制器中不存在。因此,如果属性不存在,则不会出现错误。视图仍将被破坏。它将显示空值,而不是所需的值。只是现在尝试使用Angular 1.3.8执行此操作,并且在尝试调用apply方法时,am运行到链接的未定义值。未定义directive.link.:-/我对这方面的了解还不够深入。这可能是答案,但这个答案很糟糕(不是你自己的错@crennie)
.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;
}]);
}])