角度表达插值

时间:2014-10-25 13:42:18

标签: angularjs interpolation

我在一本书中看到了以下ng-class =“expression”的例子。 http://plnkr.co/edit/fJGT5L9HZXvgAiAyXwlW?p=preview

ng-class="{error:isError,warning:isWarning}"

我得到了控制器逻辑,但我怀疑是在这里发生的插值。

以下情况意味着什么(评估值是多少)和为什么

  1. ng-class =“{error:true,warning:true}”
  2. 纳克级= “{错误:真,警告:假}”
  3. 纳克级= “{错误:假,警告:真}”
  4. 纳克级= “{错误:假,警告:假}”

3 个答案:

答案 0 :(得分:2)

  1. ng-class =“{error:true,warning:true}” => class =“错误警告”
  2. ng-class =“{error:true,warning:false}” => class =“error”
  3. ng-class =“{error:false,warning:true}” => class =“warning”
  4. ng-class =“{error:false,警告:false}” => 没有设置课程
  5. 你可以注意到ng-class只是哈希,其中键是类和值的名称 - 条件(如果为true,则类将被添加到class属性)

    因此,ng-class只使用角度表达式并检查它返回的数据(字符串,数组或散列映射),然后它应用某个解析器来获取最终的类数组以将其放入class。其中之一如上所述。

    角度表达式

    Angular就像Javascript使用eval机制来执行代码(表达式)一样,但与JS Angular不同,使用名为$eval([expression], [locals])的安全eval(Docs

    我强烈建议您阅读有关Angular表达式的article以了解它的工作原理。

答案 1 :(得分:2)

来自ngClass参数docs:

  

参数评估的结果可以是字符串   表示空格分隔的类名,数组或类的映射   名称为布尔值。在地图的情况下,的名称   值为truthy的属性将作为css类添加到   元件。

因此,在您的情况下,评估后的参数结果是一个产生:

的地图
ng-class="{error:true,warning:true}"
=> class="error warning"

ng-class="{error:true,warning:false}"
=> class="error"

ng-class="{error:false,warning:true}"
=> class="warning"

ng-class="{error:false,warning:false}"
=> no class attribute

答案 2 :(得分:1)

Angular会将以下类属性添加(或附加到现有类attr):

  1. class ="错误警告"
  2. 类="错误"
  3. 类="警告"
  4. 未添加类属性