为什么Angular视图中的数组表达式不起作用
Why array expression in Angular view not working?
要将字段的值转换为显示名称,我在视图中使用表达式作为一行。例如,后端将性别发送为男性的"M"和女性的"F",为此我将视图写成:
<td>{{ {'M': "Male", 'F': "Femail"} [partB.gender] }}</td>
而且效果很好。
在我的django模型中,我有相当数量的选择字段。其中一个是作为true
/false
接收的布尔值,为了将该字段显示为"是"/"否",我在视图中将表达式写为:
<td>
{{ ["No", "Yes"][+partB.is_employee_with_substantial_interest] }}
</td>
但是这不起作用。
我认为这可能是.
和一元+
之间的优先级问题,但事实并非如此。检查:
>> var a = {a: true, b: false}
undefined
>> a.a
true
>> +a.a
1
就我对JavaScript的了解而言,表达式["No", "Yes"][+partB.is_employee_with_substantial_interest]
本身并没有错。
在问这个问题之前,我试着自己在plunker 上弄清楚
<html ng-app="myApp" >
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.8/angular.js"></script>
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<script src="http://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.10.0.js"></script>
</head>
<body ng-controller="myCtrl">
<h1>AngularJS Template Query </h1>
<h4> JavaScript Working </h4>
<ul>
<li id="a"> Grijesh Chauhan </li>
<li id="b"> Grijesh Chauhan </li>
<li id="c"> Grijesh Chauhan </li>
<li id="d"> Grijesh Chauhan </li>
<li id="e"> Grijesh Chauhan </li>
</ul>
<div>
<h4> Angular Code not Working </h4>
<ul>
<li> {{ ["No", "Yes"][+data.b] }} </li>
<li> {{ ["No", "Yes"][+data.a] }} </li>
<li> {{ { true: "Yes", false: "No"}[data.b] }} </li>
<li> {{ { true: "Yes", false: "No"}[data.a] }} </li>
<li> {{ { 1: "Yes", 0: "No"}[+data.b] }} </li>
<li> {{ { 1: "Yes", 0: "No"}[+data.a] }} </li>
</ul>
</div>
<script>
var data = {a: true, b: false};
document.getElementById('a').innerHTML = ["No", "Yes"][+data.a];
document.getElementById('b').innerHTML = ["No", "Yes"][+data.b];
document.getElementById('c').innerHTML = { 1: "Yes", 0: "No"}[+data.b];
document.getElementById('d').innerHTML = { 1: "Yes", 0: "No"}[+data.a];
document.getElementById('e').innerHTML = { true: "Yes", false: "No"}[data.a];
</script>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.data = { a: true, b: false };
});
</script>
</body>
</html>
在opposite上,Angular中有一些东西在javascript中崩溃,例如
a.b.c.d == true
如果没有定义a、b或c,将在JS上崩溃,在角度表达式中,这将不需要
a && a.b && a.b.c && a.b.c.d
对于您的问题,您可以尝试
<li> {{ { "true": "Yes", "false": "No"}["'""+data.a+"'""] }} </li>
或者类似的东西,试图转换字符串中的布尔值。
其他更常见的解决方法
<li ng-if="data.a">Yes</li>
<li ng-if="!data.a">No</li>
这更详细,但最终更可读。
相关文章:
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 如何将正则表达式包含到字符串数组中
- 加入Regex表达式数组
- 数组上的正则表达式
- 返回Javascript中给定正则表达式的文本范围数组
- Javascript if数组包含正则表达式字符串
- 使用正则表达式将字符串转换为javascript数组
- 为什么Angular视图中的数组表达式不起作用
- 我的Angular表达式不会从数组中获取数据
- 将正则表达式存储在数组中在 Javascript 中不起作用
- Javascript从某些元素中提取日期与匹配和正则表达式返回空数组
- jQuery 验证器正则表达式使用数组或变量
- 使用正则表达式检查数组条目
- 角度表达式从对象数组中的相等属性获取对象的属性
- 使用正则表达式将字符串与数组匹配
- 创建包含正则表达式匹配中所有组的数组的有效解决方案
- Javascript 正则表达式来匹配我的数组中的表情符号
- JavaScript 使用基于 json 数组的正则表达式替换字符串
- 这个 JavaScript 对象数组表达式 {}[] 是什么意思
- Javascript数组表达式