angularjs ng-click默默地吃错误

时间:2014-01-23 00:39:12

标签: angularjs angularjs-ng-click

如果我有这样的ng-click:     NG-点击= “越野车()” 并单击控制台上不会生成任何错误消息。

这使得调试有点棘手。

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

1 个答案:

答案 0 :(得分:18)

角度表达式

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

buggy()未使用常规JavaScript进行评估。它使用$parse进行评估。

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

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

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

为什么表达是宽容的?

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

来自Angular guide to expressions

  

如果a是,则显示除了抛出异常更有意义   undefined(也许我们正在等待服务器响应,它会   很快就会定义)。如果表达评价不是原谅我们   必须编写使代码混乱的绑定,例如:   {{((A || {}),B || {})。13 C}}

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


Angular expressions

  

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

     

Angular表达式与JS表达式

     

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

     
      
  • 属性评估:所有属性的评估都与评估范围相反,而不像JavaScript那样根据全局窗口评估表达式。

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

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

  •