我有一个基于开关的div,但是开关有一个布尔变量但是该值将根据row.id进行评估。有人可以告诉我这里我做错了吗?
<div ng-switch="hasUrl">
<a ng-switch-when="row.id.indexOf(':') < 0 === true" href="{{url + row.id}}"> <!-- hasUrl = true -->
{{getName(row)}}
</a>
<a ng-switch-default href=".......">
{{getName(row)}}
</a>
</div>
答案 0 :(得分:0)
您不需要===
,请将其删除。
<div ng-switch="hasUrl">
<a ng-switch-when="row.id.indexOf(':') < 0" href="{{url + row.id}}"> <!-- hasUrl = true -->
{{getName(row)}}
</a>
<a ng-switch-default href=".......">
{{getName(row)}}
</a>
答案 1 :(得分:0)
请注意,要匹配的属性值不能 表达式。它们被解释为要匹配的文字字符串值 反对。例如,ng-switch-when =&#34; someVal&#34;将与之相匹配 string&#34; someVal&#34;不反对表达的价值 $ scope.someVal。
因此根据文档采用以下示例来解决您的情况:
<div ng-switch="hasUrl">
<span ng-switch-when="row.id.indexOf(':') < 0"> WONT SHOW </span> <!-- WILL NOT WORK EVER -->
<span ng-switch-when="makeItWork"> ALSO, WONT SHOW</span>
<span ng-switch-when="true">WILL NOT SHOW EITHER</span>
<span ng-switch-when="1">WILL SHOW</span>
</div>
仔细查看范围变量及其值:
$scope.hasUrl = 1; /* NOTICE != true BUT 1*/
$scope.row = {};
$scope.row.id = "true:";
$scope.makeItWork = $scope.row.id.indexOf(':') > 0 ? 1 : 0;
console.log($scope.makeItWork); /* SEE THAT TRUE WILL BE LOGGED BUT IT STILL WONT SHOW */
所以即使ng-switch
会评估一个表达式,它似乎也不会ng-switch-when
。如果我是你,我会坚持使用ng-if
。
FIDDLE固定小提琴