在Angular中错误地使用可重用指令时报告错误的好模式是什么?

时间:2014-05-02 16:50:28

标签: angularjs angularjs-directive

在Angular中编写可重用指令时报告错误的好方法是什么?

我正在编写一些组件作为角度指令,目的是重新使用它们,期望开发人员稍后加入这个项目,而不是拥有我现在使用该指令的所有信息。

我正在记录关于它的使用的指令和代码,并且我有单元测试,基本上是将其正确用于其他"文档"的示例。我仍然希望在他们使用该指令构建页面时回到开发人员那里有意义的回复/例外。

是否存在抛出常见异常或可能记录的模式,以帮助将错误使用指令传达给学习使用它的开发人员?

3 个答案:

答案 0 :(得分:2)

虽然这可能是一个比Angular更普遍的JS问题,但同样的理论仍然适用。你应该在try / catch / finally块中包装东西并在适当的时候抛出错误。

function Blah(isRequired, isOptional){
    var X = 7, Y = 0;
    try{
        Y = X * isRequired;
    }
    catch(err){
        throw new Error('You must provide a value for "isRequired"');
    }
    finally{
        //this example has none, but do cleanup things here
    }
}

如果要显示日志记录,可以使用Angular包装器写入控制台。它会在使用IE时尝试通过将它们写入console.log来写入console.debug来防止错误。

设定:

myapp.config(['$logProvider', function($logProvider){
    $logProvider.debugEnabled(true);
})
.run(['$rootScope', '$log',
    function ($rootScope, $log) {
        'use strict';

        //create a reference to $log on the root scope
    $rootScope.$log = $log;
    }]);

用法:

$scope.$log.log(message);
$scope.$log.debug(message);
$scope.$log.info(message);
$scope.$log.warn(message);
$scope.$log.error(message);

您还可以通过添加属性来启用/禁用指令中的日志记录。像数据记录启用的东西。

<div data-log-enabled my-directive>
</div>

在你的指令中,你这样处理它:

link: function(scope, element, attributes){
    if(attributes.logEnabled){
        scope.$log.debug('blah');
    }
}

这可以避免不必要的控制台输出,从而减慢应用程序的速度,还可以帮助开发人员最大限度地减少他们必须阅读的内容以查找所需的信息。

答案 1 :(得分:0)

您可以用于记录:

console.log()

console.debug()

console.info()

console.warn()

console.error()

这些消息将位于调试器控制台

enter image description here

查看this评论这些功能的精彩文章

答案 2 :(得分:0)

在这里查看我的答案:How do you 'require' an attribute on an angularjs directive?

当指令缺少属性或使用不正确等时,Angular使用抛出异常/错误的模式。