html三元运算符 模板,关于javascript:AngularJS模板中的三元运算符

如何与你的angularjs三元(在模板)?

这将是很好的HTML属性中使用的一些类(的风格)而创建和调用的功能控制器。

我用过滤器过滤这个

更新:Angular 1.1.5添加了一个三元运算符,因此现在我们可以简单地编写

如果使用的是早期版本的Angular,则有两种选择:

(condition && result_if_true || !condition && result_if_false)

{true: 'result_if_true', false: 'result_if_false'}[condition]

项目2。上面创建了一个具有两个属性的对象。数组语法用于选择名为true的属性或名为false的属性,并返回关联的值。

例如。,

...

or

...

$first在第一个元素的ng repeat中设置为true,因此上面的内容只会在第一次循环中应用类'myclass1'和'myclass2'。

对于ng类,有一种更简单的方法:ng类采用一个表达式,该表达式必须计算为以下值之一:

以空格分隔的类名字符串

类名数组

类名称到布尔值的映射/对象。

上面给出了一个1)的例子。下面是3个例子,我认为它读起来更好:

...

第一次通过ng重复循环,添加了类myclass。第三次通过($index从0开始),类anotherclass被添加。

ng-style接受一个表达式,该表达式的值必须为css-style名称到css值的映射/对象。例如。,

...

如果可以,我会再次投票给你更新问题!

我会处理的,@narretz.

在对象键访问示例中,可以跳过"false"键,因为它无论如何都是空字符串。

警告词1.1.5目前不稳定。

如果模型更新时条件发生了变化怎么办?我想更新ng-style,但它似乎只在第一次呈现元素时进行评估。(此处为角形Noob)

@Hartleybrody,您可能正在更改Angular的"外部"模型,因此需要调用$Apply()以使Angular重新评估ng样式表达式。

有点太晚了,但是有人知道一种可以用来让这些模板不允许这些东西的过梁吗?(例如,将复杂性设置为1或2或某种类型)

这只适用于课堂吗?例如,UI SREF呢?

更新:Angular 1.1.5添加了一个三元运算符,此答案仅适用于1.1.5之前的版本。有关1.1.5及更高版本,请参阅当前接受的答案。

角度1.1.5之前:

AngularJS中的三元形式是:

((condition) && (answer if true) || (answer if false))

例如:

或:

<<

奇怪的。这不是很直观。我想知道为什么它是这样实现的。

三元从来没有实现过,但这只是使用二元运算符的工作方式。

@幸运的是,AngularJS促进了可测试性。模板不应包含任何逻辑。模板中的三元运算符应重构为对控制器的函数调用,以获得更好的可测试性。

上面的例子应该使用ng样式和ng类吗?(我不确定何时需要使用)。

@Marcellonuccio,+1是有意义的。

@标记,如果要使用ng样式,则表达式需要eval到键为css样式名且值为css值的对象。例如,ng-style="颜色:$location.path()='/page2'&amp;&amp;'fff''000'"。我觉得这读起来更好一点,因为它更容易告诉你正在设置"颜色"。

@Marcellonuccio你能详细解释一下吗?我想根据一个布尔属性打印CSS clases,如何将其重构为控制器?(我知道,我是个笨蛋)

@arg20应该使用ngclass指令(或ngclasseven和ngclassodd)。然后把选择CSS类的所有逻辑放到控制器中。这更容易自动测试。

@Marcellonuccio但是在模型上输入类名是个好主意吗?它们属于视图,模型不应该知道视图使用的CSS类。最好的方法是使用模型中的布尔属性,比如ng-class="someboolean: 'myCssClass'"。

@arg20我说把它放在控制器里,而不是模型里。这不应该是个问题。然而,文档中说:"计算结果可以是一个表示空格分隔的类名的字符串、一个数组,或者类名到布尔值的映射。"这意味着您可以使用"css class:someBoolCheck()"作为表达式,即您将CSS类放在视图中,并将逻辑放在控制器中。请看这个JSfiddle示例。

很完美。正是我要找的!谢谢!

对于角度模板中的文本(userType是$scope的属性,如$scope.usertype):

{{userType=='admin' ? 'Edit' : 'Show'}}

到目前为止,我们都发现版本1.1.5在$parse函数中有一个适当的三元,所以只需使用这个答案作为过滤器的例子:

angular.module('myApp.filters', [])

.filter('conditional', function() {

return function(condition, ifTrue, ifFalse) {

return condition ? ifTrue : ifFalse;

};

});

然后将其用作

我是为三元运算符提这个问题的,但最后我用了一个过滤器,感觉很好…= D

这里是:在1.1.5中向角度分析器添加了三元运算符!查看更改日志

这里是一个小提琴,显示了在ng类指令中使用的新三元运算符。

ng-class="boolForTernary ? 'blue' : 'red'"

虽然您可以在早期版本的Angular中使用condition && if-true-part || if-false-part语法,但通常的三元运算符condition ? true-part : false-part在Angular 1.1.5和更高版本中可用。

{{showme==true ? 'Cancel Quiz': 'Take a Quiz'}}

Take Quiz

Start Quiz

按钮切换和更改按钮标题以及显示/隐藏分区面板。见鬼

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值