2013-12-15 4 views
5

Я хотел бы использовать ngSwitch на основе числового диапазона значений.Угловой можно использовать ngSwitch в числовом диапазоне?

Я хотел бы показать три разных текста, основанных на изменении ngSwitch. Однако я не могу получить эту работу, когда я пытаюсь установить диапазон значений в ng-switch-when. Возможно ли это, или я должен использовать ngIf вместо ngSwitch?

http://jsbin.com/eWIQoJE/1/edit

ответ

11

Это не возможно.

В ngSwitch директива проверяет, является ли значение в ngSwitchWhen является равного к одному в ngSwitch. Вместо этого, вы можете использовать ngShow или ngIf как вы предложили:

<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

Великий ответ. спас меня много времени, пытаясь заставить 'ng-switch' работать, когда это не будет ... –

4

Это возможно, но вы должны объявить вспомогательную функцию в рамках

В контроллере:

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

А в 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> 

JSBin.

+0

Нечитабельно. Мы можем добавить константы для улучшения решения, но это будет очень тяжело. Нехорошее предложение, ИМХО. – Blackhole

+1

Я думаю, что это жизнеспособные варианты в некоторых сценариях (когда проверки сложнее), но вы правы на удобочитаемости. Если кто-то действительно идет таким образом, может быть лучше использовать строки или что-то еще в качестве возвращаемых значений. – TheHippo

+1

@Blackhole IMO его нормально, если вы используете значащие строки вместо 0,1,3 ... – Mesco

0

Вы можете использовать тройной оператор с ng-init. Например:

<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> 

Похоже на комплекс, но работает как ожидается, без логики представления в контроллере.

0

В 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; 
 
     } 
 
    } 
 
});

В 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>

Смежные вопросы