Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 可以记录角度数据绑定错误吗?_Angularjs - Fatal编程技术网

Angularjs 可以记录角度数据绑定错误吗?

Angularjs 可以记录角度数据绑定错误吗?,angularjs,Angularjs,如果绑定属性或表达式失败,是否仍要记录日志 i、 e 未定义用户名或名称时记录日志 编辑: 关于这是如何发生的,似乎有很多困惑。假设我对多个视图使用viewmodel(或者我很健忘) 想象一下,我更改了JS代码,因此名称现在是user.firstName,而我忘记了更新视图。我希望在运行时将其记录下来,以便修复它。正如其他人在评论中提到的那样,当属性未在作用域中定义时,数据绑定本身不会“失败”,但会在作用域上透明地创建该属性 如果您希望在找不到名称时有一些通知行为,可以通过修饰ng mode

如果绑定属性或表达式失败,是否仍要记录日志

i、 e


未定义用户名或名称时记录日志

编辑: 关于这是如何发生的,似乎有很多困惑。假设我对多个视图使用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;
        }]);
    }])