我想在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
迭代视频 . 我不知道该怎么办这个条件:
-
在范围内添加功能?
-
在模板中做到了吗?
9 回答
Angularjs(1.1.5以下版本)不提供
if/else
功能 . 以下是您要实现的目标的几个选项:( Jump to the update below (#5) if you are using version 1.1.5 or greater )
1.三元运营商:
正如@Kirk在评论中所建议的那样,最简洁的方法是使用三元运算符,如下所示:
2. ng-switch指令:
可以使用类似以下的东西 .
3. ng-hide / ng-show指令
或者,你也可以使用
ng-show/ng-hide
但是使用它实际上会渲染一个大视频和一个小视频元素,然后隐藏符合ng-hide
条件的那个并显示满足ng-show
条件的那个 . 因此,在每个页面上,您实际上将呈现两个不同的元素 .4.另一个需要考虑的选择是ng-class指令 .
这可以如下使用 .
如果
video.large
是真的,上面基本上会给div元素添加large-video
css类 .更新:Angular 1.1.5引入了ngIf指令
5. ng-if指令:
在
1.1.5
上面的版本中,您可以使用ng-if
指令 . 如果提供的表达式返回false
,则会删除元素,如果表达式返回true
,则会在DOM中重新插入element
. 可以如下使用 .在这种情况下,您希望根据对象属性“计算”像素值 .
我会在控制器中定义一个计算像素值的函数 .
在控制器中:
然后在你的模板中你写下:
在最新版本的Angular(从1.1.5开始)中,它们包含了一个名为
ngIf
的条件指令 . 它与ngShow
和ngHide
的不同之处在于元素不是't hidden, but not included in the DOM at all. They are very useful for components which are costly to create but aren' t:Angular的一种可能性:我必须在html部分中包含一个if语句,我必须检查我生成的URL的所有变量是否都已定义 . 我是通过以下方式完成的,它似乎是一种灵活的方法 . 我希望它会对某些人有所帮助 .
模板中的html部分:
打字稿部分:
谢谢和最好的问候,
一月
三元是最明确的做法 .
Angular本身不提供if / else功能,但您可以通过包含此模块来获取它:
https://github.com/zachsnow/ng-elif
用它自己的话来说,它只是“一个简单的控制流指令集合:ng-if,ng-else-if和ng-else . ”它使用简单直观 .
例:
您可以直接使用
video.yt$aspectRatio
属性,方法是将其传递给过滤器,然后将结果绑定到模板中的height属性 .您的过滤器看起来像:
模板将是:
我同意三元非常干净 . 似乎它是非常情境化的,虽然我需要显示div或p或table,所以使用表格我不喜欢三元组,原因很明显 . 调用函数通常是理想的,或者在我的情况下,我这样做:
您可以使用上面的ng-if指令 .