2017-01-05 6 views
-1

У меня есть div на основе коммутатора, но коммутатор имеет логическую переменную, но значение будет оцениваться на основе row.id. Может кто-нибудь сказать мне, что я делаю неправильно здесь?Угловое js: динамическое выражение не работает для ng-switch-when

<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

так что проблема после того, как два ansers на ваш вопрос? Можете ли вы предоставить обратную связь? – FRECIA

ответ

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> 

0

Имейте в виду, что значения атрибутов для сопоставления не могут быть выражения. Они интерпретируются как буквальные строковые значения, соответствующие . Например, ng-switch-when = "someVal" будет соответствовать строке "someVal", а не по отношению к значению выражения $ 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> 

Look carefullyat области видимости переменных и их значения:

$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 Fixed скрипка