小编典典

AngularJS 模板中的 if else 语句

all

我想在 AngularJS 模板中做一个条件。我从 Youtube API 获取视频列表。有些视频是 16:9 的比例,有些是 4:3 的比例。

我想做出这样的条件:

if video.yt$aspectRatio equals widescreen then 
    element's attr height="270px"
else
    element's attr height="360px"

我正在使用ng-repeat. 不知道我应该怎么做这种情况:

  • 在范围内添加一个函数?
  • 在模板中做吗?

阅读 136

收藏
2022-03-03

共1个答案

小编典典

Angularjs(低于 1.1.5 的版本)不提供if/else功能。以下是您想要实现的目标的几个选项:

如果您使用的是 1.1.5 或更高版本,请跳转到下面的更新(#5)

1、三元运算符:

正如@Kirk 在评论中所建议的那样,最简洁的方法是使用三元运算符,如下所示:

<span>{{isLarge ? 'video.large' : 'video.small'}}</span>

2.ng-switch指令:

可以使用类似下面的东西。

<div ng-switch on="video">
    <div ng-switch-when="video.large">
        <!-- code to render a large video block-->
    </div>
    <div ng-switch-default>
        <!-- code to render the regular video block -->
    </div>
</div>

3. ng-hide/[`ng-

show`](https://docs.angularjs.org/api/ng/directive/ngShow)指令

或者,您也可以使用ng-show/ng-hide,但使用它实际上会渲染一个大视频和一个小视频元素,然后隐藏满足ng- hide条件的元素并显示满足ng-show条件的元素。因此,在每个页面上,您实际上将呈现两个不同的元素。

4. 另一个需要考虑的选项是[`ng-

class`](https://docs.angularjs.org/api/ng/directive/ngClass)指令。

这可以如下使用。

<div ng-class="{large-video: video.large}">
    <!-- video block goes here -->
</div>

如果是真的,上面基本上会large-video为 div 元素添加一个 css 类video.large

更新:Angular 1.1.5引入了[`ngIf

directive`](https://docs.angularjs.org/api/ng/directive/ngIf)

5.ng-if指令:

在上述版本中,1.1.5您可以使用该ng-if指令。如果提供的表达式返回,这将删除元素,如果表达式返回false,则将
重新插入elementDOM true。可以如下使用。

<div ng-if="video == video.large">
    <!-- code to render a large video block-->
</div>
<div ng-if="video != video.large">
    <!-- code to render the regular video block -->
</div>
2022-03-03