Angular 中的 ng-disabled 验证未按预期工作
ng-disabled in Angular validation not working as expected
http://plnkr.co/edit/9Yq6aZHtKCuZMtPbjBIN?p=preview
我试过并试图让它工作,但我没有运气。我正在尝试使用 angularJS 和内置验证功能禁用提交按钮。我发现,当您第一次加载表单时,提交按钮处于活动状态——没有被禁用!
我已经测试并尝试过,我发现我的验证代码接受团队名称中的空字符串/空字符串,尽管我需要输入。
有人知道如何正确格式化吗?我让它工作的唯一方法是用单个 space 替换空字符串来捏造数据...在生产中这是不可接受的...
这是 index.html:
<body ng-controller="EnterController as enter">
<div class="panel panel-primary">
<div class="panel-body">
<form name="enterFormNew" ng-submit="enter.TeamNameNext()" autocomplete="off" novalidate>
<div class="row">
<div class="col-xs-8 col-md-6">
<div class="form-group">
<label for="teamname">Team Name</label>
<input name="TeamName" ng-required ng-minlength="2" ng-maxlength="40" ng-model="enter.Team.Name" type="text" id="teamname" class="form-control" />
<p ng-show="enterFormNew.TeamName.$touched && enterFormNew.TeamName.$invalid">This is not a valid team name.</p>
</div>
<div class="form-group">
<label for="division">Division</label>
<select name="selectDivision" ng-required ng-model="enter.Team.Division" id="division" class="form-control" ng-options="division.Name for division in enter.Divisions track by division.Id ">
<option value="">Select...</option>
</select>
<p ng-show="enterFormNew.selectDivision.$touched && enterFormNew.selectDivision.$invalid">A valid Division needs to be selected.</p>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-2">
<button type="submit" class="btn btn-primary" ng-disabled="enterFormNew.$invalid">Next</button>
</div>
</div>
</form>
</div>
</div>
</body>
这里是 app.js:
angular.module('Enter', [])
.controller("EnterController", [
function() {
this.RegistrationPhase = 0;
this.Divisions = [{ Id: 1,Name: "Normal"}, {Id: 2,Name: "Not Normal"}];
this.Team = { Name: "", ResumeKey: null, Division: { Id: -1 }, Players: []};
this.TeamNameNext = function() {
//Code removed
alert("Made it to the submit function!")
};
}
]);
属性 ng-required
需要一个值。不要与不需要值的 HTML5 属性 required
混淆。
ng-required="true"
因为 "Team.Division" 在您的控制器代码中没有未定义。
如果您可以使用下面的代码,您将得到您所期望的。
this.Team = { Name: "", ResumeKey: null, Division: undefined, Players: []};
您可以使用 null 或 "" 而不是 undefined。
http://plnkr.co/edit/9Yq6aZHtKCuZMtPbjBIN?p=preview
我试过并试图让它工作,但我没有运气。我正在尝试使用 angularJS 和内置验证功能禁用提交按钮。我发现,当您第一次加载表单时,提交按钮处于活动状态——没有被禁用!
我已经测试并尝试过,我发现我的验证代码接受团队名称中的空字符串/空字符串,尽管我需要输入。
有人知道如何正确格式化吗?我让它工作的唯一方法是用单个 space 替换空字符串来捏造数据...在生产中这是不可接受的...
这是 index.html:
<body ng-controller="EnterController as enter">
<div class="panel panel-primary">
<div class="panel-body">
<form name="enterFormNew" ng-submit="enter.TeamNameNext()" autocomplete="off" novalidate>
<div class="row">
<div class="col-xs-8 col-md-6">
<div class="form-group">
<label for="teamname">Team Name</label>
<input name="TeamName" ng-required ng-minlength="2" ng-maxlength="40" ng-model="enter.Team.Name" type="text" id="teamname" class="form-control" />
<p ng-show="enterFormNew.TeamName.$touched && enterFormNew.TeamName.$invalid">This is not a valid team name.</p>
</div>
<div class="form-group">
<label for="division">Division</label>
<select name="selectDivision" ng-required ng-model="enter.Team.Division" id="division" class="form-control" ng-options="division.Name for division in enter.Divisions track by division.Id ">
<option value="">Select...</option>
</select>
<p ng-show="enterFormNew.selectDivision.$touched && enterFormNew.selectDivision.$invalid">A valid Division needs to be selected.</p>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-2">
<button type="submit" class="btn btn-primary" ng-disabled="enterFormNew.$invalid">Next</button>
</div>
</div>
</form>
</div>
</div>
</body>
这里是 app.js:
angular.module('Enter', [])
.controller("EnterController", [
function() {
this.RegistrationPhase = 0;
this.Divisions = [{ Id: 1,Name: "Normal"}, {Id: 2,Name: "Not Normal"}];
this.Team = { Name: "", ResumeKey: null, Division: { Id: -1 }, Players: []};
this.TeamNameNext = function() {
//Code removed
alert("Made it to the submit function!")
};
}
]);
属性 ng-required
需要一个值。不要与不需要值的 HTML5 属性 required
混淆。
ng-required="true"
因为 "Team.Division" 在您的控制器代码中没有未定义。
如果您可以使用下面的代码,您将得到您所期望的。
this.Team = { Name: "", ResumeKey: null, Division: undefined, Players: []};
您可以使用 null 或 "" 而不是 undefined。