【问题标题】:AngularDart directive expression grammar for mustache and other directives用于 mustache 和其他指令的 AngularDart 指令表达式语法
【发布时间】:2014-02-01 19:45:12
【问题描述】:

AngularDart mustaches {{...}} 和其他指令中允许的表达式语法是什么?

【问题讨论】:

  • 这是 Dart 表达式的有限子集。它也有一些偏差,比如空值处理。我不知道是否有文档。

标签: angularjs parsing dart grammar angular-dart


【解决方案1】:

这是 AngularDart 表达式的 EBNF 语法,与 Dart Programming Language Specification 中使用的 notation 相同。这些表达式可以作为 Angular 指令的参数出现。虽然语法允许,例如,用分号分隔的表达式、赋值和条件列表,但并非所有指令都接受这些——例如,ng-click 支持可能带有赋值的多个表达式,而 mustache 指令 {{...}} 期望一个表达式。

expressions: expression (';' expressions)?
expression:
    literal
  | id args?                        # variable or function
  | expression '.' id args?         # member
  | expression '|' id filterArg*    # filter
  | expression '[' expression ']'
  | preOp expression
  | expression binOp expression
  | expression '?' expression ':' expression
  | expression '=' expression           # assignment
args: '(' expressionList? ')'
filterArg: ':' expression
expressionList: expression (',' expression)?
literal:
    'null'
  | stringLiteral
  | numberLiteral
  | boolLiteral
  | '[' expressionList? ']'
  | '{' (keyValuePair (',' keyValuePair)? )? '}'
keyValuePair:
  expression ':' expression

preOp 和 binOp 主要是 Dart 支持的(尽管我必须交叉检查)。上面的here 有一个格式更好的版本(我无法让 MD 合作)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 2015-06-24
    • 1970-01-01
    • 2017-06-18
    • 2020-06-24
    • 1970-01-01
    相关资源
    最近更新 更多