AngularJS中的理解表达是什么?

时间:2013-10-29 11:58:58

标签: angularjs

关于理解表达,我有几个问题在脑子里嗡嗡作响:

  • 它定义的数据结构是什么?
  • 是否改编自其他语言?
  • AngularJS中使用的是哪里?此API仅适用于选择元素吗?

From the docs

  

ngOptions - comprehension_expression - 采用以下形式之一:

     

用于数组数据源:

     
      
  • 数组中值的标签
  •   
  • 选择数组中值的标签
  •   
  • 按组分组标记数组
  • 中的值   
  • 通过trackexpr
  • 选择数组轨道中的值作为标签组   
     

用于对象数据源:

     
      
  • 对象中的(键,值)标签
  •   
  • 选择对象
  • 中的(键,值)标签   
  • 按对象(按键,值)分组对象
  •   
  • 按对象中的(键,值)按组选择标签组
  •   

2 个答案:

答案 0 :(得分:15)

理解表达式只是一种以select指令识别的特殊方式格式化的字符串。

它背后没有任何魔力,只有几种格式,因为有很多方法可以处理和表示你的集合(模型的数据结构,项目/项目属性选择作为范围的模型,关于标签的一些其他选项,分组等等。)。当你考虑所有这些选项时,允许复杂的表达式并不奇怪。

假设你有这样的代码:

<select
  ng-model="color"
  ng-options="c.name group by c.shade for c in colors"></select>

为了抛弃理解表达式并使用属性,你会写这样的东西:

<select
  ng-model="color"
  ng-data-type="object"
  ng-data="colors"
  ng-select="c"
  ng-label="c.name"
  ng-group-by="c.shade"></select>

扩展API后,属性方法可能会变得丑陋。此外,通过理解表达式,使用过滤器会更容易。

答案 1 :(得分:1)

从某种意义上说,如包所说,“ comprehension_expression”只是“一个字符串”,而另一方面,源代码只是一个字符串。编程语言只是字符串。

SQL SELECT语句

–很可能是“ comprehension_expression”的语法和功能灵感的一部分(但是它并不明显,因为在文档中没有提到它–也许如果我深入研究开发人员对话,我可能会能够找到)–

只是一个字符串。

当然,它们只是字符串,但是它们具有结构,这与他们要解决的问题有关。问题是,结构是否得到充分描述?是否明确了它的模式及其与当前问题的关系?它与其他人设计的其他结构的关系是否明显?

尽管“ comprehension_expression”只是一个字符串,但另一方面,它的复杂性几乎就是它本身就是一种副语言。

但是它在文档(https://docs.angularjs.org/api/ng/directive/ngOptions)中的描述方式确实反映了一种态度,即它“只是具有某种格式的字符串”。在ng-options的文档中将其作为ng-options指令的类型。在某种程度上,它不是一个独立的实体,它是二等公民。

列出不同格式的方式可能会给人一种奇怪的感觉,就像是一种即席即用的,而没有任何模式将不同的可能格式联系在一起(尽管如果仔细观察,就会发现有一种模式)。如果没有具有规则结构的正式语法,您可能会怀疑它们是否真的涵盖了所有可能的选择。相比之下,SQL SELECT语句的MySQL文档:https://dev.mysql.com/doc/refman/5.7/en/select.html

显然,这样的形式语法可能会令人生畏,对于“ comprehension_expression”而言可能不是必需的,另一方面,可以肯定地说它是精确定义的。

我怀疑问题的质询者对文档中提到“ comprehension_expression”有多随意感到不安;它看起来像是一种漂浮的,类似幽灵的实体,只是被简要提及,但是没有给出自己的页面等。

可能值得拥有自己的页面,因为它本身具有被视为一个实体的能力,因为这随后引发了有关“子语言”设计的讨论。它是怎么发生的? “子语言”功能不同的原因是什么?哪些功能和语法相互冲突?为什么可以将此功能与该功能一起使用,而不能与另一功能一起使用?是否有来自例如SQL,在设计这种“子语言”吗?

否则,这似乎是一个天生的发明,与同类其他DSL无关。

在有关ng-options的博客文章中, https://www.undefinednull.com/2014/08/11/a-brief-walk-through-of-the-ng-options-in-angularjs/ Shidhin先生链接到一个小讨论 https://groups.google.com/forum/#!topic/angular/4EDe8xIbjLU

仅在讨论此问题的地方。 “马特·休斯(Matt Hughes)”还表达了这样的观点:“对于一个指令,似乎还增加了许多复杂性。”

也许这没什么大不了的。我只是想把它放在那里。