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的新手
答案 0 :(得分:1)
这不是缓存问题。通过使用!= undefined
进行检查,您只需检查字符串或变量是否已定义 - 但它仍然可以是空字符串。
所以基本上发生的事情是:你输入一些东西,user
和pass
的两个字符串被初始化。从这时起,对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 || '';