angularjs旧输入字段值使用范围覆盖新输入值

时间:2014-03-14 17:39:20

标签: javascript html angularjs

HTML:

username: <input type="text" ng-model="username" /><br />
password: <input type="text" ng-model="password" /><br />
<button class="btn btn-primary" type="button" ng-click="login()">Login</button>

JS:

$scope.login = function(){
    var user = $scope.username;
    var pass = $scope.password;
    if(user != undefined && pass != undefined){
    alert("NOT BLANK" + " user: " + user + " pass: " + pass);
    } else {
    alert("BLANK");
    }
};

问题: 当我第一次使用来自2个字段的输入值单击Login时,alert显示NOT BLANK user:test pass:value,但是当我从字段中删除值并单击Login时,alert会显示NOT BLANK user:pass:which由于字段值已被删除,因此不正确。如果我刷新页面,然后单击“登录”,则警报将显示BLANK。我认为这是缓存的问题。有人可以帮忙吗我是angularjs的新手

2 个答案:

答案 0 :(得分:1)

这不是缓存问题。通过使用!= undefined进行检查,您只需检查字符串或变量是否已定义 - 但它仍然可以是空字符串。

所以基本上发生的事情是:你输入一些东西,userpass的两个字符串被初始化。从这时起,对undefined的检查将始终返回false。 当你删除所有字母时,两个变量仍然包含一个String-Object,只是没有字符(基本上是这样的:var user = '')。

将您的代码更改为以下代码:

$scope.login = function(){
   var user = $scope.username;
   var pass = $scope.password;
   if(!user && !pass){
      alert("BLANK");
   } else {

     alert("NOT BLANK" + " user: " + user + " pass: " + pass);
 }
};

答案 1 :(得分:0)

支票user != undefined && pass != undefined)过于严格。

您应检查空字符串:user === '' && pass === ''

<强>更新

初始化值,使它们最初不是undefined

var user = $scope.username || '';
var pass = $scope.password || '';