2016-01-30 2 views
1

Есть ли способ определить, является ли значение, сохраненное с использованием ng-model, просто нулевым или если набрано 0, в Angular.JS?Как отличить нуль от «0» в Angular.js?

В принципе, я пытаюсь использовать решительность в моем пути, чтобы отправить пользователю обратно #/page-1, если они пытаются перейти к #/page-2 и vm.data.foo не была завершена. Как и в случае обновления страницы браузера, которая сбрасывает временные данные.

Проблема, с которой я столкнулся, заключается в том, что если пользователь вводит значение «0», то он обрабатывается так же, как и значение null Angular.JS. Есть ли способ провести различие между двумя, используя заявление if?

В моей #/page-1 зрения:

<input type="number" ng-model="vm.Data.foo" /> 

Мой маршрут для #/page-2:

 $routeProvider.when("/page-2", { 
      controller: "page2Controller", 
      controllerAs: "vm", 
      templateUrl: "/content/templates/page2View.html", 
      resolve: { 
       validate: function ($location, Data) { 
        // if Data.foo was not entered, send back to page-1 
        if (!Data.foo && Data.foo != 0) { 
         $location.path('/page-1'); 
        } 
       } 
      } 
     }); 

Это была одна из моих попыток, но он не работает. В обновлении браузера он не перенаправляется обратно на страницу-1, когда Data.foo имеет значение null, поскольку он отображается так же, как 0.

Любые идеи для работы вокруг?


Решение (благодаря ответу Чета):

$routeProvider.when("/page-2", { 
     controller: "page2Controller", 
     controllerAs: "vm", 
     templateUrl: "/content/templates/page2View.html", 
     resolve: { 
      validate: function ($location, Data) { 
       // if Data.foo was not entered, send back to page-1 
       if (Data.foo === '') { 
        $location.path('/page-1'); 
       } 
      } 
     } 
    }); 

ответ

2

Это не то, что он обрабатывает нуль как 0, он обрабатывает как 0 и нуль как ложь. !(null) == true как есть !(0) == true. Вы хотите что-то еще, как:

if (Data.foo === null) { 
+0

Спасибо! Тройной знак равенства работал. Мне просто пришлось изменить его на: 'if (Data.foo === '') {}'. Мне придется искать, как '===' отличается от просто '=='. – Wellspring

+2

=== не делает принуждение типа. Например, '0 == '0'' истинно, но' 0 ===' 0'' не является. – Chet

+1

'==' сначала преобразует операнды в один и тот же тип, '===' не преобразуется и будет истинным только в том случае, если оба имеют один и тот же тип. '0 == false; // true, но '0 === false; // false' – unpollo

1

Использование просто:

if(Data.foo == null){} 

В JavaScript null, 0 и пустые строки обрабатываются как false при использовании в if заявление как заявление

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