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. 一款好用且免费的语句分析工具Plan Explorer

    在调优过程中的查询语句优化阶段,分析语句的执行计划是必经之路,一款好的执行计划分析工具确实可以帮助我们事半功倍 小贴士:Plan Explorer是将Plan Explorer 专业版与免费版整合在一 ...

  2. <<Differential Geometry of Curves and Surfaces>>笔记

    <Differential Geometry of Curves and Surfaces> by Manfredo P. do Carmo real line Rinterval I== ...

  3. Python的第四天

    函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函 ...

  4. 查看sql语句执行的消耗

    set statistics profile on set statistics io on set statistics time on go <这里写上你的语句...> go set ...

  5. C# 抽象类abstract

    不能初始化的类被叫做抽象类,它们只提供部分实现,但是另一个类可以继承它并且能创建它们的实例,有未被实现的方法.抽象类不可以new对象. "一个包含一个或多个纯虚函数的类叫抽象类,抽象类不能被 ...

  6. [转]细说SQL Server中的加密

    简介 加密是指通过使用密钥或密码对数据进行模糊处理的过程.在SQL Server中,加密并不能替代其他的安全设置,比如防止未被授权的人访问数据库或是数据库实例所在的Windows系统,甚至是数据库所在 ...

  7. 【解决】若要使用报表生成器,必须在此计算机上安装 .Net Framework 3.5

    在报表库中试图通过点击菜单“在报表生成器中编辑”编辑报表时,会跳转到错误信息页面,提示: 若要使用报表生成器,必须在此计算机上安装 .Net Framework 3.5. 一般情况下并不是因为没有安装 ...

  8. 模拟下载的进度条ProgressBar

    作者:堕落的天使 图片效果 activity_main.xml(代码) <RelativeLayout xmlns:android="http://schemas.android.co ...

  9. nodejs express环境配置

    下载安装最新版nodejs,安装完毕运行命令 node -v 查看版本以及是否安装成功. 然后安装express插件,命令 npm install -g express (全局)  , express ...

  10. 《疯狂Java讲义》(二)---- Java程序的运行机制和JVM

    1. 运行机制 Java源文件(*.java)-----使用javac编译----编译成*.class文件----使用java解释执行----特定平台的机器码 2. 原理 负责解释执行字节码文件的就是 ...