【问题标题】:What is a question mark for in the next expression in an angular 2 appangular 2 应用程序中的下一个表达式中的问号是什么
【发布时间】:2017-01-31 17:40:39
【问题描述】:

只是想知道问号在 Angular 2 应用程序中的下一个表达式中是什么意思。

<h1>
 Time Remaining: {{ currentExercise.duration? - exerciseRunningDuration }}
</h1>

【问题讨论】:

  • 应该是?. 不知道是不是只有?。你能确认一下吗?
  • @micronyks 书中有这个例子,只有问号
  • @silentsod 这里的例子没有使用安全操作符。保存运算符是问号,然后是一个点。这里只是一个表达式末尾的问号。
  • 奇怪...你在哪里找到这个代码?

标签: angular binding interpolation


【解决方案1】:

只是补充 @silentsod 评论,因为文档 URL 已更改。

safe navigation operator (?.) 打错了

<h1>
 Time Remaining: {{ currentExercise?.duration - exerciseRunningDuration }}
</h1>

【讨论】:

    【解决方案2】:

    正如之前的答案所述,这是一个错字,正如 Harshl 所说,如果 (.) 是在 ?标记,Angular 将其视为三元运算符。但如果语句是:

    <h1>
     Time Remaining: {{ currentExercise?.duration - exerciseRunningDuration }}
    </h1>enter code here
    

    问号充当安全导航操作符。 “它提供了一种方法来防止属性路径中出现空值和未定义值。表达式在遇到第一个空值时退出。显示将为空白,但应用程序将保持滚动没有错误”。 (Angular Documentation)

    另外,如果代码如下:

    <h1>
    Time Remaining: {{ currentExercise.duration - exerciseRunningDuration }}
    </h1>enter code here
    

    如果 'currentExercise' 的 'duration' 属性为空,Angular 将抛出空引用错误,整个视图将消失。这就是为什么使用安全导航运算符很重要的原因。

    【讨论】:

      【解决方案3】:

      这显然是拼写错误/打印错误。如果在? 标记之后没有(.),那么Angular 模板编译器会将其视为三元运算符

      【讨论】:

        【解决方案4】:
        <h1>
         Time Remaining: {{ currentExercise?.duration - exerciseRunningDuration }}
        </h1>
        

        那个?使属性可选。如果父范围属性 : currentExercise 不存在,它将抛出 NON_ASSIGNABLE_MODEL_EXPRESSION 异常。您可以使用 =?或 =?attr 以将属性标记为可选。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-08-04
          • 2017-03-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多