ng-switch 的属性值被解释为要匹配的文字字符串值。(意味着不能是表达式。)例如,ng-switch-when="someVal" 将匹配字符串“someVal”而不是表达式 $scope.someVal 的值。
如果你真的必须使用 ng-switch,它可以通过 .toString() javascript 方法的变通方法强制半使用评估表达式。例如,使用范围变量 numeric 'lastSortIndex' 和 boolean 'reverseSorted',加上 AngularJS HTML 变量 '$index':
<div ng-switch="((lastSortIndex === $index).toString()+(reverseSorted).toString())">
<div ng-switch-when="truetrue">
<span class="glyphicon glyphicon-chevron-up">{{ header }}</span>
</div>
<div ng-switch-when="truefalse">
<span class="glyphicon glyphicon-chevron-down">{{ header }}</span>
</div>
<div ng-switch-default>{{header}}</div>
</div>
请注意,上面的示例将布尔值连接在一起,然后评估它们的字符串内容。最好将它移动到一个可调用函数中,该函数返回一个要在 switch-case 中评估的字符串。
尽管如果可能的话,我会建议您将逻辑保留在代码的逻辑控制器区域(javascript 文件)中。您可以将 ng-html-safe AngularJS 指令与他们的 Sanitize 功能结合使用,在 Javascript 中调用一个函数,该函数为您切换并返回所需的 HTML 代码片段。例子:
索引.html:
<html ng-app="myApp">
<head>
<script src="https://code.angularjs.org/1.3.13/angular-sanitize.js">
</head>
<body ng-controller="MainController">
<!-- add your other code, like a table code here -->
<div ng-bind-html="HeaderSortIcon(lastSortIndex, $index, reverseSorted, header)">
</div>
</body>
脚本.js:
var myApp = angular.module('myApp ', ['ngSanitize']);
$scope.HeaderSortIcon = function (lastSortIndex, $index, reverseSorted, header) {
if (lastSortIndex === $index) {
if( reverseSorted )
{
return '<div><span class="glyphicon glyphicon-chevron-up"></span>' + header + '</div>';
}
else{
return '<div><span class="glyphicon glyphicon-chevron-down"></span>' + header + '</div>';
}
}
else {
return header;
}
}