Angular js:动态表达式不适用于ng-switch-when

时间:2017-01-05 02:15:26

标签: javascript angularjs ng-switch

我有一个基于开关的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>

2 个答案:

答案 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固定小提琴