javascript - 为什么 Angular JS Controller 的作用域变量不将 this 设置为 true?

标签 javascript angularjs

我正在尝试编写一个 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/

相关文章:

javascript - 使用按钮按 Angular 拖放元素

javascript - Wordpress 中的下拉菜单

javascript - 在 JavaScript 函数中将 CSS id 作为参数传递

javascript - 如何让 Angular 应用程序访问后端 API

javascript - 如何在两个日期之间定义剑道网格列过滤器?

javascript - 如果 $http.get() 导致没有新数据,则使 AngularJS 跳过运行摘要循环

javascript - 删除/添加元素时是否可以为 flex 元素的位置设置动画?

javascript - 制作网页的本地副本时出现问题

javascript - Angular JS Android 应用程序默认参数的意外标记

javascript - 在浏览器中编辑*现有* PDF