在每次输入完成及其验证后更新进度条 (bootstrap)
Updating progress bar (bootstrap) after each input completion and its validation
我有一个问题,我需要填写表格并自动更新进度条。 from 可以切换,因此输入的数量可能会有所不同(不能保证 6 或 7 个输入的数量始终是静态的)。
下面的片段看起来很乱只是因为 bootstrap 美化
const app = angular.module('myApp', ['ui.bootstrap']);
signUpCtrl.$inject = ["$scope", "uibDateParser"];
app.controller("signUpCtrl", signUpCtrl);
function signUpCtrl($scope, uibDateParser) {
$scope.model = {};
$scope.formType = "student";
$scope.submitStudent = function() {
console.log($scope.model);
}
$scope.submitTeacher = function() {
console.log($scope.model);
}
$scope.changeForm = function(type) {
$scope.formType = type;
}
}
<html ng-app="myApp">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/2.5.0/ui-bootstrap-tpls.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
</head>
<body>
<div ng-controller="signUpCtrl">
<div ng-switch="formType">
<div ng-switch-when="student">
<div class="form-group">
<h3>Sign up as a student</h3>
<form name="signupForm" ng-submit="submitStudent()">
<div class="input-group" ng-class="{ 'has-success': signupForm.firstname.$valid && signupForm.firstname.$dirty, 'has-error': !model.name && signupForm.firstname.$dirty }">
<span class="input-group-addon"><i class="fa fa-user fa-fw"></i></span>
<input class="form-control" type="text" name="firstname" ng-model="model.name" placeholder="First name">
</div>
<div class="input-group" ng-class="{ 'has-success': signupForm.lastname.$valid && signupForm.lastname.$dirty, 'has-error': !model.surname && signupForm.lastname.$dirty }">
<span class="input-group-addon"><i class="fa fa-user fa-fw"></i></span>
<input class="form-control" type="text" name="lastname" ng-model="model.surname" placeholder="Last name">
</div>
<div class="input-group" ng-class="{ 'has-success': signupForm.username.$valid && signupForm.username.$dirty, 'has-error': !model.username && signupForm.username.$dirty }">
<span class="input-group-addon"><i class="fa fa-user-circle fa-fw"></i></span>
<input class="form-control" type="text" name="username" ng-model="model.username" placeholder="Username">
</div>
<div class="input-group" ng-class="{ 'has-success': signupForm.dob.$valid, 'has-error': !model.dob && signupForm.dob.$dirty }">
<span class="input-group-addon"><i class="fa fa-calendar fa-fw"></i></span>
<input class="form-control" type="text" name="dob" ng-model="model.dob" uib-datepicker-popup="{{'d!/M!/yyyy'}}" required placeholder="DD/MM/YYYY">
</div>
<div class="input-group" ng-class="{ 'has-success': signupForm.email.$valid, 'has-error': signupForm.email.$invalid && signupForm.email.$dirty }">
<span class="input-group-addon"><i class="fa fa-envelope-o fa-fw"></i></span>
<input class="form-control" type="email" name="email" ng-model="model.email" required placeholder="Email address">
</div>
<div ng-class="{ 'has-success': signupForm.pass.$valid && signupForm.pass2.$valid && signupForm.pass.$dirty && signupForm.pass2.$dirty, 'has-warning': (model.password.length < 6 && model.password_confirm.length < 6) && signupForm.pass.$dirty && signupForm.pass2.$dirty, 'has-error': (model.password != model.password_confirm) && signupForm.pass.$dirty && signupForm.pass2.$dirty }">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-key fa-fw"></i></span>
<input class="form-control" type="password" name="pass" ng-model="model.password" placeholder="Password">
</div>
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-unlock-alt fa-fw"></i></span>
<input class="form-control" type="password" name="pass2" ng-model="model.password_confirm" placeholder="Confirm password">
</div>
</div>
<div class="progress">
<div class="progress-bar progress-bar-success progress-bar-striped active" role="progressbar" aria-valuenow="{{count}}" aria-valuemin="0" aria-valuemax="7" ng-style="{'width': count*(100/7)+'%'}">
<span ng-show="count && count<7">{{count}}/7</span>
<span ng-show="count && count==7">Completed</span>
</div>
</div>
<button class="btn btn-success" type="submit" ng-disabled="count != 7">Sign up</button>
</form>
</div>
<button class="btn btn-info" type="button" ng-click="changeForm('teacher')">I am a teacher</button>
</div>
<div ng-switch-when="teacher">
<div class="form-group">
<h3>Sign up as a teacher</h3>
<form name="signupForm" ng-submit="submitTeacher()">
<div class="input-group margin-bottom-sm">
<span class="input-group-addon"><i class="fa fa-user fa-fw"></i></span>
<input class="form-control" type="text" ng-model="model.name" placeholder="First name">
</div>
<div class="input-group margin-bottom-sm">
<span class="input-group-addon"><i class="fa fa-user fa-fw"></i></span>
<input class="form-control" type="text" ng-model="model.surname" placeholder="Last name">
</div>
<div class="input-group margin-bottom-sm">
<span class="input-group-addon"><i class="fa fa-user-circle fa-fw"></i></span>
<input class="form-control" type="text" ng-model="model.username" placeholder="Username">
</div>
<div class="input-group margin-bottom-sm">
<span class="input-group-addon"><i class="fa fa-envelope-o fa-fw"></i></span>
<input class="form-control" type="text" ng-model="model.email" placeholder="Email address">
</div>
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-key fa-fw"></i></span>
<input class="form-control" type="password" ng-model="model.password" placeholder="Password">
</div>
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-unlock-alt fa-fw"></i></span>
<input class="form-control" type="password" ng-model="model.password_confirm" placeholder="Confirm password">
</div>
<div class="progress">
<div class="progress-bar progress-bar-success progress-bar-striped active" role="progressbar" aria-valuenow="{{count}}" aria-valuemin="0" aria-valuemax="6" ng-style="{'width': count*(100/6)+'%'}">
<span ng-show="count && count<6">{{count}}/6</span>
<span ng-show="count && count==6">Completed</span>
</div>
</div>
<button class="btn btn-success" type="submit" ng-disabled="count != 6">Sign up</button>
</form>
</div>
<button class="btn btn-info" type="button" ng-click="changeForm('student')">I am a student</button>
</div>
</div>
<h3><small>This button updates progress manualy:</small></h3>
<button class="btn btn-info" ng-click="count = count + 1">Testing</button>
</div>
</body>
可以使用 $watch
,但我不确定这是否是解决我的问题的最佳方法。我需要它知道有 6/7/更多的输入可以切换、禁用等。
为不同的表单维护不同的进度条。
您将了解每个表单的输入数量,因此按那里的输入数量计算 100%。在填写并验证每个输入(电子邮件、phone 号码等)后,您可以提高填充金额的百分比并将其存储在范围变量中。
即使切换了表单,您也可以继续使用范围变量(填充字段)或将其设为 0。
我有一个问题,我需要填写表格并自动更新进度条。 from 可以切换,因此输入的数量可能会有所不同(不能保证 6 或 7 个输入的数量始终是静态的)。
下面的片段看起来很乱只是因为 bootstrap 美化
const app = angular.module('myApp', ['ui.bootstrap']);
signUpCtrl.$inject = ["$scope", "uibDateParser"];
app.controller("signUpCtrl", signUpCtrl);
function signUpCtrl($scope, uibDateParser) {
$scope.model = {};
$scope.formType = "student";
$scope.submitStudent = function() {
console.log($scope.model);
}
$scope.submitTeacher = function() {
console.log($scope.model);
}
$scope.changeForm = function(type) {
$scope.formType = type;
}
}
<html ng-app="myApp">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/2.5.0/ui-bootstrap-tpls.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
</head>
<body>
<div ng-controller="signUpCtrl">
<div ng-switch="formType">
<div ng-switch-when="student">
<div class="form-group">
<h3>Sign up as a student</h3>
<form name="signupForm" ng-submit="submitStudent()">
<div class="input-group" ng-class="{ 'has-success': signupForm.firstname.$valid && signupForm.firstname.$dirty, 'has-error': !model.name && signupForm.firstname.$dirty }">
<span class="input-group-addon"><i class="fa fa-user fa-fw"></i></span>
<input class="form-control" type="text" name="firstname" ng-model="model.name" placeholder="First name">
</div>
<div class="input-group" ng-class="{ 'has-success': signupForm.lastname.$valid && signupForm.lastname.$dirty, 'has-error': !model.surname && signupForm.lastname.$dirty }">
<span class="input-group-addon"><i class="fa fa-user fa-fw"></i></span>
<input class="form-control" type="text" name="lastname" ng-model="model.surname" placeholder="Last name">
</div>
<div class="input-group" ng-class="{ 'has-success': signupForm.username.$valid && signupForm.username.$dirty, 'has-error': !model.username && signupForm.username.$dirty }">
<span class="input-group-addon"><i class="fa fa-user-circle fa-fw"></i></span>
<input class="form-control" type="text" name="username" ng-model="model.username" placeholder="Username">
</div>
<div class="input-group" ng-class="{ 'has-success': signupForm.dob.$valid, 'has-error': !model.dob && signupForm.dob.$dirty }">
<span class="input-group-addon"><i class="fa fa-calendar fa-fw"></i></span>
<input class="form-control" type="text" name="dob" ng-model="model.dob" uib-datepicker-popup="{{'d!/M!/yyyy'}}" required placeholder="DD/MM/YYYY">
</div>
<div class="input-group" ng-class="{ 'has-success': signupForm.email.$valid, 'has-error': signupForm.email.$invalid && signupForm.email.$dirty }">
<span class="input-group-addon"><i class="fa fa-envelope-o fa-fw"></i></span>
<input class="form-control" type="email" name="email" ng-model="model.email" required placeholder="Email address">
</div>
<div ng-class="{ 'has-success': signupForm.pass.$valid && signupForm.pass2.$valid && signupForm.pass.$dirty && signupForm.pass2.$dirty, 'has-warning': (model.password.length < 6 && model.password_confirm.length < 6) && signupForm.pass.$dirty && signupForm.pass2.$dirty, 'has-error': (model.password != model.password_confirm) && signupForm.pass.$dirty && signupForm.pass2.$dirty }">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-key fa-fw"></i></span>
<input class="form-control" type="password" name="pass" ng-model="model.password" placeholder="Password">
</div>
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-unlock-alt fa-fw"></i></span>
<input class="form-control" type="password" name="pass2" ng-model="model.password_confirm" placeholder="Confirm password">
</div>
</div>
<div class="progress">
<div class="progress-bar progress-bar-success progress-bar-striped active" role="progressbar" aria-valuenow="{{count}}" aria-valuemin="0" aria-valuemax="7" ng-style="{'width': count*(100/7)+'%'}">
<span ng-show="count && count<7">{{count}}/7</span>
<span ng-show="count && count==7">Completed</span>
</div>
</div>
<button class="btn btn-success" type="submit" ng-disabled="count != 7">Sign up</button>
</form>
</div>
<button class="btn btn-info" type="button" ng-click="changeForm('teacher')">I am a teacher</button>
</div>
<div ng-switch-when="teacher">
<div class="form-group">
<h3>Sign up as a teacher</h3>
<form name="signupForm" ng-submit="submitTeacher()">
<div class="input-group margin-bottom-sm">
<span class="input-group-addon"><i class="fa fa-user fa-fw"></i></span>
<input class="form-control" type="text" ng-model="model.name" placeholder="First name">
</div>
<div class="input-group margin-bottom-sm">
<span class="input-group-addon"><i class="fa fa-user fa-fw"></i></span>
<input class="form-control" type="text" ng-model="model.surname" placeholder="Last name">
</div>
<div class="input-group margin-bottom-sm">
<span class="input-group-addon"><i class="fa fa-user-circle fa-fw"></i></span>
<input class="form-control" type="text" ng-model="model.username" placeholder="Username">
</div>
<div class="input-group margin-bottom-sm">
<span class="input-group-addon"><i class="fa fa-envelope-o fa-fw"></i></span>
<input class="form-control" type="text" ng-model="model.email" placeholder="Email address">
</div>
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-key fa-fw"></i></span>
<input class="form-control" type="password" ng-model="model.password" placeholder="Password">
</div>
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-unlock-alt fa-fw"></i></span>
<input class="form-control" type="password" ng-model="model.password_confirm" placeholder="Confirm password">
</div>
<div class="progress">
<div class="progress-bar progress-bar-success progress-bar-striped active" role="progressbar" aria-valuenow="{{count}}" aria-valuemin="0" aria-valuemax="6" ng-style="{'width': count*(100/6)+'%'}">
<span ng-show="count && count<6">{{count}}/6</span>
<span ng-show="count && count==6">Completed</span>
</div>
</div>
<button class="btn btn-success" type="submit" ng-disabled="count != 6">Sign up</button>
</form>
</div>
<button class="btn btn-info" type="button" ng-click="changeForm('student')">I am a student</button>
</div>
</div>
<h3><small>This button updates progress manualy:</small></h3>
<button class="btn btn-info" ng-click="count = count + 1">Testing</button>
</div>
</body>
可以使用 $watch
,但我不确定这是否是解决我的问题的最佳方法。我需要它知道有 6/7/更多的输入可以切换、禁用等。
为不同的表单维护不同的进度条。 您将了解每个表单的输入数量,因此按那里的输入数量计算 100%。在填写并验证每个输入(电子邮件、phone 号码等)后,您可以提高填充金额的百分比并将其存储在范围变量中。 即使切换了表单,您也可以继续使用范围变量(填充字段)或将其设为 0。