angularjs ng-click默默地吃错误

bvs*_*bvs 19 angularjs angularjs-ng-click

如果我有这样的ng-click:ng-click ="buggy()"并单击控制台上没有生成错误消息.

这使得调试有点棘手.

为什么没有生成错误消息?我能做什么?

Ila*_*mer 18

角度表达

实际上,它并不是特别的ng-click,它是角度表达式的默认行为.

buggy()不使用常规JavaScript进行评估.用它进行评估$parse.

$parse 计算表达式并返回一个针对作用域运行的函数.

$parse 仅在表达式无效时记录错误.

角度表达评估是宽容的,我想不出任何方式来传递它.

为什么表达是宽容的?

Angular表达式原谅undefined和null的基本原理与数据绑定有关.绑定变量最初可能是未定义的,或者在编译到DOM中时为null-一个非常明显的例子是绑定变量依赖于promise.Angular团队决定,除非在解决该承诺之前弹出错误消息,否则最好继续默默地继续.

Angular指南到表达式:

如果a未定义(或许我们正在等待服务器响应,并且很快就会定义),则显示除了抛出异常更有意义.如果表达式评估不是宽容的,我们必须编写使代码混乱的绑定,例如:{{((a || {}).b || {}).c}}

另请参阅:https://groups.google.com/forum/m/#!topic / angular/HRVOUKEHLFw


角度表达式:

表达式是类似JavaScript的代码片段,通常放在绑定中,例如{{expression}}.表达式由$ parse服务处理.表达式通常使用过滤器进行后处理,以创建更加用户友好的格式.

角度表达式与JS表达式

将Angular视图表达式视为JavaScript表达式可能很诱人,但这并不完全正确,因为Angular不使用JavaScript eval()来计算表达式.您可以将Angular表达式视为JavaScript表达式,但有以下区别:

  • 属性评估:与在全局窗口中评估表达式的JavaScript不同,所有属性的评估都与评估范围相反.

  • 原谅:表达式评估对于undefined和null是宽容的,与JavaScript不同,在JavaScript中,尝试评估未定义的属性可以生成ReferenceError或TypeError.

  • 无控制流语句:您不能在角度表达式中执行以下任何操作:条件,循环或抛出.

  • 谢谢.我可以看到生产代码的推理.但是在开发和调试期间,能够打开更详细的"解析"表达式会更好. (19认同)
  • 只是为了补充 - 角度表达式宽容的动机是数据绑定.绑定变量最初可能是未定义的,或者在编译到DOM中时为null-一个非常明显的例子是绑定变量依赖于promise.在该承诺得到解决之前,我们不希望弹出错误消息. (2认同)