如何在Angular.js中区分null和'0'?

时间:2016-01-30 17:36:24

标签: javascript angularjs

在Angular.JS中,有没有办法确定使用ng-model保存的值是否为null或者是否输入了0?

基本上,我尝试在我的路线中使用“解决方案”将用户发送回#/page-1,如果他们尝试转到#/page-2并且vm.data.foo未完成。就像浏览器页面刷新一样,它会重置临时数据。

我遇到的问题是,如果用户键入“0”,则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');
                    }
                }
            }
        });

这是我的一次尝试,但它不起作用。在浏览器刷新时,当Data.foo为空时,它不会重定向回到第1页,因为它看起来与0相同。

有关解决方法的任何想法吗?

解决方案(感谢Chet的回答):

    $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 :(得分:2)

并不是将null视为0,而是将0和null都视为false。 !(null) == true!(0) == true一样if (Data.foo === null) { 。你想要更像的东西:

{{1}}

答案 1 :(得分:1)

简单地使用:

if(Data.foo == null){}

在javascript中,null0和空字符串在false语句中用作语句时将被处理为if