【问题标题】:AngularJS: Validators in Controller no binding with HTML sideAngularJS:控制器中的验证器没有与 HTML 端绑定
【发布时间】:2017-04-25 23:53:41
【问题描述】:

HTML 端的所有内联验证工作正常,但是当我在控制器中使用函数(函数 ingresarNuevoEmpleador 和 limpiarNuevoEmpleador)时,总是得到 $invalid=true。 $setPristine 都不起作用。 显然双方都在引用不同的对象,因为控制器功能 不要修改 html 端验证器的状态。

<form name="frmEmpleadorDirecto" novalidate>
    <div class="row">
      <div class="col-xs-8 col-sm-8">
       <div class="form-group has-feedback" 
        ng-class="{'has-error': frmEmpleadorDirecto.nempleador.$invalid && (frmEmpleadorDirecto.nempleador.$touched || frmEmpleadorDirecto.$submitted)}">
          <label for="input501">Empleador Directo</label>
          <input type="text" class="form-control text-uppercase" name="nempleador" placeholder="Nombre Empleador" ng-model="objEmpleador_.nombreEmpleador_" ng-minlength="2" ng-maxlength="30" ng-required="true">
          <span class="help-block" ng-if="frmEmpleadorDirecto.nempleador.$error.minlength && frmEmpleadorDirecto.nempleador.$touched">too short</span>
          <span class="help-block" ng-if="frmEmpleadorDirecto.nempleador.$error.maxlength && frmEmpleadorDirecto.nempleador.$touched">too long</span>
          <span class="help-block" ng-if="frmEmpleadorDirecto.nempleador.$error.required && frmEmpleadorDirecto.nempleador.$touched">required</span>
          </div>
        </div>
      </div>
      <div class="text-right">
      <button type="submit" class="btn btn-success btn-mm" ng-disabled="frmEmpleadorDirecto.$pristine || frmEmpleadorDirecto.$invalid" ng-click="ingresarNuevoEmpleador()">Aceptar</button>
      <button type="button" class="btn btn-warning btn-mm" ng-click="limpiarNuevoEmpleador()">Limpiar</button>
    </div>
    </form>

控制器:

angular.module('BlurAdmin.pages.empleador_')
      .controller('CtrlEmpleadorNuevo',CtrlEmpleadorNuevo);

 function CtrlEmpleadorNuevo($scope,$http,$rootScope) {

  $scope.objEmpleador_ = new eva.Empleador_();


  $scope.ingresarNuevoEmpleador = function()
     {
    console.log("Nombre: " + $scope.objEmpleador_.nombreEmpleador_); //OK
        if($scope.objEmpleador_.$valid)  //always invalid
        {

        console.log('valid!');
        }else {
          console.log('invalid!');        }

    }

    $scope.limpiarNuevoEmpleador = function () 
    {

        $scope.objEmpleador_.$setPristine; //no changes
       $scope.objEmpleador_.nombreEmpleador_ = ''; //Works: reset html field

    }
}

对象:

eva.Empleador_ = function() {
    var self = this;
    self.nombreEmpleador_ = '';
};

【问题讨论】:

    标签: javascript html angularjs validation


    【解决方案1】:

    您的表单绑定在您的 $scope 和输入上,并且可以在 name 属性之后达到它们的有效性。

      $scope.ingresarNuevoEmpleador = function(){
        console.log("Nombre: " + $scope.objEmpleador_.nombreEmpleador_); //OK
            if($scope.frmEmpleadorDirecto.nempleador.$valid) {
            console.log('valid!');
            }else {
              console.log('invalid!');        
            }
    
        };
    

    Plunker

    【讨论】:

    • angular.js:12798 TypeError: Cannot read property 'nempleador' of undefined at ChildScope.CtrlEmpleadorNuevo.$scope.ingresarNuevoEmpleador(CtrlEmpleadorNuevo.js:17)
    • 你能检查一下plunker吗?我没有收到任何错误,按下按钮时控制台会显示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多