angular的表单,点击确定进行创建,支持批量创建,表单验证有样式提醒;

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
</head>
<link rel="stylesheet" href="./../node_modules/bootstrap/dist/css/bootstrap.css">
<style>
fieldset{
border:1px solid black;
padding:10px;
position:relative;
}
</style> <script src="./../node_modules/angular/angular.js"></script>
<script src="form.controller.js"></script>
<body ng-app="app">
<!-- 控制器 -->
<div class="row form-group" ng-controller="form" style="width:50%;margin:100px auto">
<!-- 表单 -->
<form name="myForm">
<!-- 点击添加策略 -->
<button class="btn btn-primary" style="display:block;margin:5px auto;width:80%" ng-click="addScale()">
<span class="fa fa-plus" ></span>添加策略
</button>
<p ng-show="data.type=='1'&&expand.length==0 || data.type=='2'&&narrow.length==0" style="color:#c82e29;text-align:center">相同策略只能创建一次</p>
<!-- 循环生成 -->
<fieldset class="margin-10" ng-repeat="x in rules">
<!-- 点击关闭当前块 -->
<span class="glyphicon glyphicon-remove" style="position:absolute;cursor:pointer;top:10px;right:10px;z-index:1" ng-click="reduce($index)"></span>
<!-- ng-class="{类名:bool,'类名':bool2}" bool值表达式可以用{{}},myForm.inputName.$dirty是否修改,$valid验证是否通过; -->
<div class="col-md-5 margin-bottom-10" ng-class="{'has-success':myForm.{{'envs_name'+$index}}.$valid,'has-error':myForm.{{'envs_name'+$index}}.$invalid && myForm.{{'envs_name'+$index}}.$dirty}">
<label class="control-label">
<span class="symbol required"></span>请选择策略
</label><br>
<select class="form-control" style="width:100%" required name="{{'envs_name'+$index}}" ng-model="x.metric">
<option value="{{x}}" ng-repeat="x in expand">{{formatMetric(x)}}</option>
</select> </div>
<div class="col-md-2" style="padding:0">
<div style="margin-top:30px" class="text-center">{{data.type =="1"?"大于或等于":"小于或等于"}}</div>
</div>
<div class="col-md-5 margin-bottom-15" ng-class="{'has-success':myForm.{{'envs_value'+$index}}.$valid,'has-error':myForm.{{'envs_value'+$index}}.$invalid && myForm.{{'envs_value'+$index}}.$dirty}">
<label class="control-label"><span class="symbol required"></span>百分比</label><br>
<input class="form-control" style="width:100%" step="0.1" required ng-pattern="/^\d+(\.\d+)+$/" max="100" type="number" name="{{'envs_value'+$index}}" ng-model="x.threshold_value" >
<span ng-show="myForm.{{'envs_value'+$index}}.$invalid && myForm.{{'envs_value'+$index}}.$dirty" style="color:#c82e29">请输入0-100的小数</span>
</div> <div class="col-md-4 margin-bottom-10" ng-if="data.type ==1" ng-class="{'has-success':myForm.{{'envs_priority'+$index}}.$valid,'has-error':myForm.{{'envs_priority'+$index}}.$invalid && myForm.{{'envs_priority'+$index}}.$dirty}">
<label class="control-label">
<span class="symbol required"></span>优先级
<br>
</label>
<input class="form-control" style="width:100%" required type="number" name="{{'envs_priority'+$index}}" ng-model="x.priority">
</div>
<div class=" margin-bottom-10" ng-class="{'col-md-4':data.type==1,'col-md-6':data.type==2,'has-success':myForm.{{'envs_init'+$index}}.$valid,'has-error':myForm.{{'envs_init'+$index}}.$invalid && myForm.{{'envs_init'+$index}}.$dirty}">
<label class="control-label"><span class="symbol required"></span> 最{{data.type==1 ? "大":"小"}}容器数量</label><br>
<input style="width:100%" required type="number" min='1' name="{{'envs_init'+$index}}" ng-model="x.container_num">
<span ng-show="myForm.{{'envs_init'+$index}}.$invalid && myForm.{{'envs_init'+$index}}.$dirty" style="color:#c82e29">请输入不小于1的整数</span>
</div>
<div class=" margin-bottom-10" ng-class="{'col-md-4':data.type==1,'col-md-6':data.type==2,'has-success':myForm.{{'envs_step'+$index}}.$valid,'has-error':myForm.{{'envs_step'+$index}}.$invalid && myForm.{{'envs_step'+$index}}.$dirty}">
<label class="control-label"><span class="symbol required"></span> 每次扩缩容数量</label><br>
<input class="form-control" style="width:100%" min='1' required type="number" name="{{'envs_step'+$index}}" ng-model="x.step">
<span ng-show="myForm.{{'envs_step'+$index}}.$invalid && myForm.{{'envs_step'+$index}}.$dirty" style="color:#c82e29">请输入不小于1的整数</span>
</div> </fieldset> </form>
<button class="btn btn-primary btn-o pull-right" ng-click="ok(rules,myForm)">确定</button>
<button class="btn btn-primary btn-o pull-right" ng-click="cancel()">取消</button>
</div>
</body>
</html>

下面是js代码

var myModule = angular.module('app', []);
console.log(myModule);
myModule.controller("form",["$scope",function($scope){
//数据初始化
$scope.rules=[{}];
$scope.data={
type:1,
}
$scope.expand = [ "memory.usage.percent","cpu.usage.percent","thread.usage.number"] //点击添加策略,增加表单块
$scope.addScale = function(){
$scope.rules.push({});
}
//点击X,删除当前块
$scope.reduce = function($index){
$scope.rules.splice($index,1);
if($scope.rules.length === 0){
$scope.addScale();
}
} $scope.formatMetric = function(metric) {
switch (metric) {
case "memory.usage.percent":
return "内存平均值";
case "cpu.usage.percent":
return "CPU 平均值";
case "thread.usage.number":
return "JVM 线程数";
default:
return ""
}
};
//点击确定
$scope.ok = function(myForm){
if(myForm.$invalid){
return ;
}
//..
} }])

最后效果:点击添加策略,会增加一块策略,右上角X点击关闭,当表单验证不通过时,显出红色,通过绿色,验证不通过点击确定不发送请求;

angular表单的更多相关文章

  1. Angular 表单(二) - 模板驱动表单

    import { Component, OnInit } from '@angular/core'; import { Hero} from '../hero'; @Component({ selec ...

  2. angular表单经验分享

    原文 https://www.jianshu.com/p/af359bd04f32 大纲 1.表单的名字不可以和传入的值的名字相同 2.在模板驱动表单的时候要使用angular表单的验证功能,需要将n ...

  3. Angular 表单验证类库 ngx-validator 1.0 正式发布

    背景介绍 之前写了一篇 <如何优雅的使用 Angular 表单验证>,结尾处介绍了统一验证反馈的类库  ngx-validator  ,由于这段时间一直在新模块做微前端以及相关业务组件库, ...

  4. Angular表单 (一)表单简介

    Angular 表单 angular提供了两种不同的方法来通过表单处理用户输入:响应式表单和模板驱动表单.二者都从视图中捕获用户输入事件.验证用户输入.创建表单模型.修改数据模型,并提供跟踪这些更改的 ...

  5. Angular表单验证

    novalidate   去掉html5自带的验证 ng-minlength    规定输入文本的最小长度 ng-maxlength    规定输入文本的最大长度 ng-submit  接收一个方法名 ...

  6. 简单的angular表单验证指令

    <html ng-app="myApp"> <head> <meta charset="UTF-8"> <title& ...

  7. angular表单验证实例----可用的代码

    前段时间,公司做一个单页面,就是一个表单验证,早开始在菜鸟教程上关注了angular,所以下派上用场了 angular里面对于表单验证,设置了很多指令. 也就是说不用自己写一些逻辑,直接绑定指令就行. ...

  8. 从浅入深剖析angular表单验证

    最近手上维护的组件剩下的BUG都是表单验证,而且公司的表单验证那块代码经历的几代人,里面的逻辑开始变得不清晰,而且代码结构不是很angular. 是很有必要深入了解表单验证. 入门之前,我觉得应该先了 ...

  9. angular 表单验证

    最近在用angular写表单验证时 , 不小心把ng-model全替换删掉了, 然后发现之前写的验证都失效, 在查阅资料和反复修改摸索后, 发现angular中的表单验证, 都是基于ng-model的 ...

随机推荐

  1. tomcat war部署根目录下

    一个很取巧的办法,步骤如下: 1. 删除webapp下所有文件 cd ${TOMAT_HOME}/webapps && rm -rf * 2. copy待部署war到webapps目录 ...

  2. [Maven] - Eclipse "maven compiler plugin" 冲突解决

    刚安装最新的Maven 3.2.5,在eclipse中使用maven的Run As->Maven Install,总会提示: Failed to execute goal org.apache. ...

  3. 提供VR定制开发、AR定制开发(VR游戏定制、应用定制)

    设置输出路径 添加烘培输出的贴图类型 添加“LightingMap”类型 设置烘培贴图大小和目标贴图位置为“自发光” 设置烘培材质,选择“输出到源” 点击“渲染”即可 24.标准材质贴图的烘培光影处理 ...

  4. zepto.js使用前注意

    API:http://www.css88.com/doc/zeptojs_api/ 一.建议:不要从官网下载,而是从 Github 下载了源代码之后自己 Build 一个版本,这样你可以自行挑选适合的 ...

  5. Shiro简单配置

    注:这里只介绍Spring配置模式. 因为官方例子虽然中有更加简洁的ini配置形式,但是使用ini配置无法与spring整合.而且两种配置方法一样,只是格式不一样. 涉及的jar包 核心包shiro- ...

  6. 使用Navicat连接数据库,不能创建外键

    最近在学习python中遇到这样的情况,使用Navicat连接MySQL,为表结构创建外键时,出现了创建外键就消失,而且外键也没有创建成功的情况. 在网上找了些资料,最后发现是MySQL引擎的问题.由 ...

  7. oracle之sequence详解

    Oracle提供了sequence对象,由系统提供自增长的序列号,每次取的时候它会自动增加,通常用于生成数据库数据记录的自增长主键或序号的地方. sequence的创建需要用户具有create seq ...

  8. flash builder (fb) 与flash professional cs6(fla) 联合调试

    注意加载的swf名字与项目(fla)名字一致,在fb进行构建,如果fla代码做了修改,保持在fb构建最新.

  9. XML编程知识点总结

    DOM和SAX DOM的全称是Document Object Model,也即文档对象模型.基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合,应用程序挣是通过对这个对象模型的操作,来实 ...

  10. jquery 实现重复点击一个元素时不重复执行效果

    jquery 实现重复点击一个元素时不重复执行效果 这需要用到jquery的stop方法 实例 停止当前正在运行的动画: $("#stop").click(function(){ ...