你能记录角度数据绑定错误吗?

时间:2013-05-10 18:14:59

标签: angularjs

无论如何,如果绑定的属性或表达式失败,

是否会记录?

即。

<input type="text" ng-model="user.name" />

未定义用户或名称时记录?

修改 对于如何发生这种情况似乎存在很多困惑。让我们假设我使用viewmodel进行多个视图(或者我非常健忘)

想象一下,我更改了JS代码,以便名称现在是user.firstName,我忘了更新我的视图。我想在运行时记录它,以便我可以解决它。

1 个答案:

答案 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