2013-12-15 7 views

Odpowiedz

11

To nie jest możliwe.

W ngSwitch dyrektywa sprawdza czy wartość w ngSwitchWhen jest równe do jednej w ngSwitch. Zamiast tego można użyć ngShow lub ngIf jak zaproponowali:

<div ng-if="test === 0">Is zero</div> 
<div ng-if="test > 10">Is greater than 10</div> 
<div ng-if="!(test === 0 || test > 10)">Default</div> 

JSBin

+0

Wielki odpowiedzi. zaoszczędziło mi to wiele czasu, próbując uruchomić 'ng-switch', aby nie działało ... –

4

Jest to możliwe, ale trzeba zadeklarować funkcję pomocniczą w zakresie

W kontrolerze:

$scope.switchHelper = function(value) { 
    if (value === 0) 
    return 0; 
    if (value > 10) 
    return 1; 
    if (!(value === 0 || test)) 
    return 3; 
}; 

An w HTML:

<div ng-switch="switchHelper(test)"> 
    <div ng-switch-when="0">Is zero</div> 
    <div ng-switch-when="1">Is greater than 10</div> 
    <div ng-switch-when="3">Default</div> 
</div> 

Jako .

+0

Nieczytelne. Możemy dodać stałe, aby poprawić rozwiązanie, ale będzie to bardzo ciężkie. To nie jest dobra propozycja, IMHO. – Blackhole

+1

Myślę, że jest to opłacalna opcja w niektórych scenariuszach (gdy kontrole są bardziej złożone), ale masz rację co do czytelności. Jeśli ktoś naprawdę podąża w tym kierunku, może lepiej użyć ciągów lub czegoś innego jako wartości zwracanych. – TheHippo

0

Można użyć operatora trójskładnikowego z dyrektywą ng-init. W ten sposób:

<div ng-init="value = (test == 0 ? 0 : (test > 10 ? 1 : null))" ng-switch="value"> 
    <div ng-switch-when="0">Is zero</div> 
    <div ng-switch-when="1">Is greater than 10</div> 
    <div ng-switch-default>Default</div> 
</div> 

Wygląda na kompleks, ale działa zgodnie z oczekiwaniami bez logiki widoku w kontrolerze.

0

w JavaScript

app.controller('numberCtrl', function ($scope) { 
 
    $scope.someNum = 0; 
 
    $scope.someVal = 0; 
 

 
    $scope.updateVal = function() { 
 
     if (($scope.someNum >= 1) && ($scope.someNum <= 5)) { 
 
      $scope.someVal = 1; 
 
     } else { 
 
      $scope.someVal = 0; 
 
     } 
 
    } 
 
});

W HTML

<div ng-controller="numberCtrl"> 
 
      <label>Enter a value from 1 to 5</label> 
 
      <input type="text" ng-model="someNum" ng-change="updateVal()" /> 
 
      <div ng-switch="someVal"> 
 
       <p ng-switch-when="1">You entered {{someNum}}</p> 
 
       <p ng-switch-when="0">Invalid input</p> 
 
      </div>   
 
     </div>

Powiązane problemy