我正在Angular中构建一个应用程序,所以任何Angular特定的答案都是可以接受的,但我的问题是整个JavaScript。
我的应用使用了几个JSON文件来存储信息。这些JSON文件在head
中加载script
标记,其中的对象被分配给服务中的变量。我正在使用3个主要的JSON对象,其中一些对象依赖于其他对象。
例如,其中一个属性具有Description
属性,其中包含与表达式结合的文本,例如:The value is {{10+(2*var)}}
。
但是,其他一个对象有子节点,其中一些在编译Description
时可能包含也可能不包含。一个孩子的值将存储为var2
而另一个孩子不会存储。
如果我将表达式更改为:The value is {{(10+(2*var))*var2}}
,则只有在使用第一个子项并定义var2
时,该值才有效。如果使用了第二个孩子,则var2
未定义,因此请留下" NaN"。
我能想到的最好的方法是创建另一个包含子子节点中所有可能值的对象,并将它们设置为默认值,然后在存在值的子节点时覆盖它们。
然而,这有几个缺点。首先,我必须让所有变量(有很多)出现在另一个对象中,而大多数变量都不需要。我还必须重置"这个对象反复出现。
是否有更高效,更标准化的方法来完成此类事情?
答案 0 :(得分:3)
您可以直接在模板中默认变量,这样您就不必担心存在或执行顺序。
文本值为:
The value is {{(10+(2*(var||1)))*(var2||1)}}
如果缺少var2
,则只会乘以1.
您还可以在Angular表达式中使用三元条件,例如
The value is {{(var2 ? 10+(2*var))*var2 : 10+(2*var))}}
注意:我强烈建议不要命名变量var
,因为它是javascript中的关键字,在尝试使用Angular(或许多其他上下文)解析它们时可能会给您带来麻烦。