我正在尝试编写一个 Controller 代码,以便在更改另一个 Controller 后某些输入会被禁用。
这是 Controller :
app.controller('SignUpController',function ($scope, $http) {
this.unavaliable = true
this.userUnavaliable = function() {
console.log(this.unavaliable)
return this.unavaliable
}
this.userExists = function(mail) {
if (mail) {
var who = $http.get("/existingUsers/"+mail)
who.success(function(data,status, headers, config) {
if (data.mail) {
this.unavaliable = true
console.log(data.mail + " ya existe en la DB")
}
else{
this.unavaliable = false
}
});
who.error(function(data, status, headers, config) {
alert("AJAX failed!");
})
}
}
})
正如我下面的标记所示,一个输入应该获得某个类,而当 unavaliable
设置为 true
时,另一个输入应该被禁用。但即使我可以访问 console.log(),该变量似乎也永远不会变为 true。
这是我的标记:
<form class="form-inline" role="form">
<div class="form-group">
<input type="email" class="form-control input-lg" ng-model="signup.mail" placeholder="e-mail" ng-change="signup.userExists(signup.mail)" ng-class="{'has-error':signup.userUnavaliable()}">
</div>
<div class="form-group">
<input type="password" class="form-control input-lg" placeholder="Contraseña" ng-nodel="signup.password">
</div>
<div class="checkbox">
<label>
<input type="checkbox" ng-model="signup.role" value="admin"> Administrador
</label>
</div>
<button type="submit" class="btn btn-primary" ng-disabled="signup.unavaliable" >Registrar</button>
</form>
我尝试使用 $scope
而不是 this
但从未让它以这种方式工作
最佳答案
试试这个:
app.controller('SignUpController',function ($scope, $http) {
var that = this;
that.unavaliable = true;
that.userUnavaliable = function() {
console.log(that.unavaliable)
return that.unavaliable
}
that.userExists = function(mail) {...
您的问题似乎与 JS Context 有关;在上面的示例中,它保存在 that
变量中。这就是 JOhn's Papa approach 中的做法。
关于javascript - 为什么 Angular JS Controller 的作用域变量不将 this 设置为 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23881283/