【问题标题】:Form input is undefined表单输入未定义
【发布时间】:2015-02-14 16:19:46
【问题描述】:

为什么名称和密码未定义? 我在他们身上使用了 ng-model...

 <form class="login" name="form">
            <div class="form-group" ng-class="{'has-error': isInvalidLogin}">
                <label for="name">Name: </label>
                <input type="text" ng-model="name" id="name" class="form-control" placeholder="Nitzan">
            </div>
            <div class="form-group" ng-class="{'has-error': isInvalidLogin}">
                <label for="password">Password: </label>
                <input type="password" ng-model="password" id="password" class="form-control" placeholder="1234">
                <p class="help-block" ng-if="isInvalidLogin">Name or password are wrong!</p>
            </div>
            <button type="submit" class="btn btn-block btn-lg btn-success login-btn" ng-click="login()">Login</button>
        </form>

在控制器中:

 $scope.login = function () {
        usersService.get($scope.name, $scope.password).then(function success(result){
           $scope.currentUser = result;
        }, function error() {
            $scope.isInvalidLogin = true;
        });
    };

查看 plunker: http://plnkr.co/edit/QD3vtil3w9pd4d1TGl9v?p=preview

【问题讨论】:

    标签: angularjs forms view model


    【解决方案1】:

    您的问题是因为 ng-if 指令从当前范围创建子范围。因此,$scope.login 函数内部未定义 $scope.name 和 $scope.password。

    我建议您为user 创建一个对象,该对象最初是空白的,例如user={},或者您可以使用ng-init 在html 上执行此操作,然后将其放在mainController 中,以便它可以直接访问由父母而不做$parent. 表示法。

    并将namepassword 放在用户对象内。

    HTML

      <div ng-init="user={}">
        <div class="container login-div" ng-if="!currentUser">
          <form class="login" name="form" ng-submit="login()">
            <div class="form-group" ng-class="{'has-error': isInvalidLogin}">
              <label for="name">Name:</label>
              <input type="text" ng-model="user.name" id="name" class="form-control" placeholder="Nitzan">
            </div>
            <div class="form-group" ng-class="{'has-error': isInvalidLogin}">
              <label for="password">Password:</label>
              <input type="password" name="test" ng-model="user.password" id="password" class="form-control" placeholder="1234">
              <p class="help-block" ng-if="isInvalidLogin">Name or password are wrong!</p>
            </div>
            <button type="submit" class="btn btn-block btn-lg btn-success login-btn">Login</button>
          </form>
        </div>
      </div>
    

    代码

        $scope.login = function () {
            alert("Name "+ $scope.user.name +"& password is " +$scope.user.password)
            //usersService.get($scope.name, $scope.password).then(function success(result){
            //   $scope.currentUser = result;
            //}, function error() {
            //    $scope.isInvalidLogin = true;
            //});
        };
    

    Working Plunkr 在这里。

    更新

    否则,您需要添加更改您的 ng-model 以将此范围引用到父范围,例如

    HTML

    姓名ng-model="$parent.name"

    密码ng-model="$parent.password"

    代码

       $scope.login = function () {
            alert("Name "+ $scope.name +"& password is " +$scope.password)
            //usersService.get($scope.name, $scope.password).then(function success(result){
            //   $scope.currentUser = result;
            //}, function error() {
            //    $scope.isInvalidLogin = true;
            //});
        };
    

    Plunkr Here

    希望这可以帮助你。谢谢。

    【讨论】:

    • ng-if 创建了一个子作用域,但名称和密码在它之外(未嵌套),那么为什么它们在 ng-if 子作用域中?
    • @EmeraldBach 是 ng-if 从当前作用域docs.angularjs.org/api/ng/directive/ngIf#创建子作用域!
    • 但是名称和密码没有嵌套在 ng-if 中 - ngmodel 不在 ng-if 中
    • @EmeraldBach 你已经解决了这个问题。请查看此 Plunkr plnkr.co/edit/QD3vtil3w9pd4d1TGl9v?p=preview 中的 html ..Form 标签在 ng-if="!currentUser"
    • @EmeraldBach 这不是好事..实际上您添加了问题,我正在向您解释您添加的内容..谢谢,
    猜你喜欢
    • 2018-04-12
    • 1970-01-01
    • 2018-06-30
    • 2018-08-03
    • 2021-04-28
    • 2018-07-01
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多