博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
angualarjsdemo
阅读量:4308 次
发布时间:2019-06-06

本文共 3579 字,大约阅读时间需要 11 分钟。

原版地址:

 

  控件(inputselecttextarea)是用户输入数据的一种方式。Form(表单)是这些控件的集合,目的是将相关的控件进行分组。

  表单和控件提供了验证服务,所以用户可以收到无效输入的提示。这提供了更好的用户体验,因为用户可以立即获取到反馈,知 道如何修正错误。请记住,虽然客户端验证在提供良好的用户体验中扮演重要的角色,但是它可以很简单地被绕过,因此,客户端验证是不可信的。服务端验证对于 一个安全的应用来说仍然是必要的。

一、Simple form

  理解双向数据绑定的关键directivengModelngModel提供了从modelviewviewmodel的双向数据绑定。并且,它还向其他directive提供API,增强它们的行为。

二、Using CSS classes

  为了让form以及控件、ngModel富有样式,可以增加以下class

  • ng-valid
  • ng-invalid
  • ng-pristine(从未输入过)
  • ng-dirty(输入过)

  下面的例子,使用CSS去显示每个表单控件的有效性。例子中,user.nameuser.email都是必填的,但当它们修改过之后(dirty),背景将呈现红色。这确保用户不会直到与表单交互之后(提交之后?),发现未能满足其有效性,才为一个错误而分心。

  
CSSClasses
名字:
Email:
性别:
form = { {user | json}}
saved = { {saved | json}}

 

三、Binding to form and control state

  在angular中,表单是FormController的一个实例。表单实例可以随意地使用name属性暴露到scope中(这里没看懂,scope里面没有一个跟formname属性一直的property,但由于有“document.表单名”这种方式,所以还是可以获取到的)。相似地,控件是NgModelController的实例。控件实例可以相似地使用name属性暴露在form中。这说明form和控件(control)两者的内部属性对于使用标准绑定实体(standard binding primitives)绑定在视图中的这个做法是可行的。

  这允许我们通过以下特性来扩展上面的例子:

  • RESET按钮仅仅在form发生改变之后才可用。
  • SAVE按钮仅仅在form发生改变而且输入有效的情况下可用。
  • user.emailuser.agree定制错误信息。
  
ControlState
名字:
请填写名字
Email:
提示:
请填写Email
这不是一个有效的Email
性别:
我同意:
请同意并签名~
form = { {user | json}}
saved = { {saved | json}}

 

四、Custom Validation

  angular为大多数公共的HTML表单域(inputtext,number,url,email,radio,checkbox)类型提供了实现,也有一些为了表单验证的directiverequiredpattern,inlengthmaxlengthminmax)。

  可以通过定义增加定制验证函数到ngModel controller(这里是连在一起的ngModelController吗?)中的directive来定义我们自己的验证插件。为了得到一个controllerdirective如下面的例子那样指定了依赖(directive定义对象中的require属性)。

  • ModelView更新 无论什么时候Model发生改变,所有在ngModelController.$formatters(当model发生改变时触发数据有效性验证和格式化转换)数组中的function将排队执行,所以在这里的每一个function都有机会去格式化model的值,并且通过NgModelController.$setValidityhttp://code.angularjs.org/1.0.2/docs/api/ng.directive:ngModel.NgModelController#$setValidity)修改控件的验证状态。
  • ViewModel更新 一个相似的方式,无论任何时候,用户与一个控件发生交互,将会触发NgModelController.$setViewValue。这时候轮到执行NgModelController$parsers(当控件从DOM中取得值之后,将会执行这个数组中所有的方法,对值进行审查过滤或转换,也进行验证)数组中的所有方法。

  在下面的例子中我们将创建两个directive

  • 第一个是integer,它负责验证输入到底是不是一个有效的整数。例如1.23是一个非法的值,因为它包含小数部分。注意,我们通过在数组头部插入(unshift)来代替在尾部插入(push),这因为我们想它首先执行并使用这个控件的值(估计这个Array是当作队列来使用的),我们需要在转换发生之前执行验证函数。
  • 第二个directivesmart-float。他将”1.2”和”1,2”转换为一个合法的浮点数”1.2”。注意,我们在这不可以使用HTML5input类型”number”,因为浏览器不允许用户输入我们预期的非法字符,如”1,2”(它只认识”1.2”)。
  
CustomValidation
大小(整数 0 - 10):
{ {size}}
这不是一个有效的整数
数值必须在0到10之间
长度(浮点数):
{ {length}}
这不是一个有效的浮点数

 

五、Implementing custom form control (using ngModel)

  angular实现了所有HTML的基础控件(inputselecttextarea),能胜任大多数场景。然而,如果我们需要更加灵活,我们可以通过编写一个directive来实现自定义表单控件的目的。

  为了制定控件和ngModel一起工作,并且实现双向数据绑定,它需要:

  • 实现render方法,是负责在执行完并通过所有NgModelController.$formatters方法后,呈现数据的方法。
  • 调用$setViewValue方法,无论任何时候用户与控件发生交互,model需要进行响应的更新。这通常在DOM事件监听器里实现。

  可以查看$compileProvider.directivehttp://www.cnblogs.com/lcllao/archive/2012/09/09/2677190.html)获取更多信息。

  下面的例子展示如何添加双向数据绑定特性到可以编辑的元素中。

 

  
CustomControl
My Little Dada
model = { {content}}

转载于:https://www.cnblogs.com/Jerry-spo/p/5689692.html

你可能感兴趣的文章
C# 通过URL获取图片并显示在PictureBox上的方法
查看>>
矩阵学习摘记,欢迎指正
查看>>
2018.08.02 hdu1558 Segment set(并查集+计算几何)
查看>>
2019.03.29 NOIP训练 友好国度(点分治+容斥)
查看>>
实验1.1
查看>>
2015 多校第三场
查看>>
CSS基础
查看>>
浅蓝色设计类网站模板
查看>>
QT中的pro文件
查看>>
幂等和高并发在电商系统中的使用
查看>>
手机操控全站仪安卓版 测量员.app
查看>>
mysql 模块使用
查看>>
解决android中Layout文件下的xml文件配好后,R类中不能自动生成相应代码
查看>>
[iOS] photoKit获取所有照片
查看>>
下载安装webstrom及激活
查看>>
Android Studio 之 NDK篇
查看>>
【ASP】简单Url编码和Url解码实例
查看>>
怎样基于谷歌地图的Server缓存公布Image Service服务
查看>>
完美攻略心得之圣魔大战3(Castle Fantisia)艾伦希亚战记(艾伦西亚战记)包含重做版(即新艾伦希亚战记)...
查看>>
浅谈UML的概念和模型之UML九种图
查看>>