form.FormController

FormController跟踪所有他所控制的和嵌套表单以及他们的状态,就像有效/无效或者脏值/原始。

每个表单指令创建一个FormController实例。

方法

$addControl();

给表单注册一个控制器。

使用了ngModelController的输入元素会在连接时自动执行。

$removeControl();

给表单注销一个控制器。

使用了ngModelController的输入元素会在注销时自动执行。

$setValidity();

给表单设置表单控制器的有效性。

此方法也将传播到父表单。

$setDirty();

给表单设置一个脏状态。

这个方法将被调用去添加类“ng-dirty”,给表单设置一个脏状态。这个方法将传到父表单。

$setPristine();

将表单设置为原始状态。

这种方法被调用去删除类“ng-dirty”,给表单设置初始状态。这个方法将传到父表单。

属性:

$pristine

如果用户和表单尚未进行交互,则为true。

$dirty

如果用户和表单已进行交互,则为true。

$valid

所有的表格和控制器都是验证有效,则为true。

$invalid

如果至少有一个控件或表单验证无效,则为true。

$error

是一个hash对象,包含引用无效的控制器或表单。

ngModel.NgModelController

ngModel.NgModelController为ng-model指令提供了API。该控制器包含数据绑定,验证,CSS更新服务,和值的格 式化和解析。它很明确的不包含任何逻辑处理,DOM渲染或者监听事件。这种的DOM相关的逻辑应该由其他使用NgModelController进行数据 绑定指令提供。

方法

$render();

当视图需要更新时调用。

$isEmpty(value);

当我们需要判断input的值是否为空时可执行。例如, input的值是否存在,则需要的指令执行此函数。默认的$isEmpty函数检查值是否是“undefined”、“”、null或者NaN。

Value:检查的引用。

$setValidity(validationErrorKey,isValid);

改变有效性的状态,并通知表单当控制器的有效性发生变化。(如果验证器已经被标记为无效,则不通知表单。)

在需要验证的时候这种方法被调用---即分析器或格式化功能。

validationErrorKey:验证器的名称。validationErrorKey将会被分配给$error[validationErrorKey ] =isValid,这样就可以进行数据绑定了。

isValid:当前状态是否是valid(true)或者invalid(false)。

$setPristine();

设置控制器初始化状态。

$setViewValue(value);

更新页面的值。

当页面上的值发生变化时,这个方法被调用。

value:页面上的值。

属性

$viewValue

页面上实际的字符串值。

$modelValue

模型中控制器绑定的的该值。

$parsers

执行的功能的数组,作为一个控制器从DOM读取值的管道。每一个函数被调用去传递值到下一个,最后返回值用于填充模型。用于净化/转换或者验证值。为了验证,解析器应该使用$setvalidity()更新有效状态,并返回未定义的无效值。

$formatters

执行的功能的数组,作为一个控制器从DOM读取值的管道。每一个函数被调用去传递值到下一个,最后返回值用于填充模型。用于的格式化/转换在控制器和验证中显示的值。

$viewChangeListeners

当页面上值变化时所执行的函数的数组。它没有参数被执行,它的返回值被忽略。这可以用来代替对模型值额外的监听。

$error

带有所有错误的hash对象。

$pristine

用户还没有与控制器交互,则为true。

$dirty

用户已经与控制器交互,则为true。

$valid

如果没错误,则为true。

$invalid

控制器上至少有一个错误,则为true。

使用代码:

  div[contenteditable] { border: 1px solid black; background-color: white; min-height: 24px; width: 200px; margin-top: 20px; }
.myDiv { float: left; display: block; margin-left: 30px; }
  <div ng-app="Demo">
<div ng-controller="testCtrl as ctrl">
<div class="myDiv">
<div content-editable strip-br="true" ng-model="ctrl.userContent">Hello World!</div>
</div>
<div class="myDiv">
<textarea ng-model="ctrl.userContent" style="min-height: 240px"></textarea>
</div>
</div>
</div>
  (function () {
angular.module("Demo", ["ngSanitize"])
.directive("contentEditable", contentEditable)
.controller("testCtrl",angular.noop);
function contentEditable() {
return {
restrict: "A",
require: "?ngModel",
link: function (scope, element, attrs, ngModel) {
if (!ngModel) return;
ngModel.$render = function () {
element.html(ngModel.$viewValue || "");
};
element.on("blur keyup change", function () {
scope.$apply(read);
});
read();
function read() {
var html = element.html();
if (attrs.stripBr && html == "<br />") {
html = "";
}
ngModel.$setViewValue(html);
}
}
};
}
}());

上面对于FormController的那些属性,可以作为angular表单验证的判断。对于下面的NgModelController,用的不多,不过几个方法和属性在指令中还是挺方便使用的,感觉这种操作也和jquery操作相似。

Angular - - form.FormController、ngModel.NgModelController的更多相关文章

  1. AngularJs form.FormController、ngModel.NgModelController

    form.FormController FormController跟踪所有他所控制的和嵌套表单以及他们的状态,就像有效/无效或者脏值/原始. 每个表单指令创建一个FormController实例. ...

  2. 细说angular Form addControl方法

    在本篇博文中,我们将接触angular的验证.angular的验证是由form 指令和ngModel协调完成的.今天博主在这里想要说的是在验证在的一种特殊情况,当验证控件没有没有name属性这是不会被 ...

  3. angular之$watch、$watchGroup、$watchCollection

    1,原型:$watch: function(watchExp, listener, objectEquality, prettyPrintExpression){}: 2,参数:watchExp(必须 ...

  4. tornado web高级开发项目之抽屉官网的页面登陆验证、form验证、点赞、评论、文章分页处理、发送邮箱验证码、登陆验证码、注册、发布文章、上传图片

    本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tornado的后端和ajax的 ...

  5. angular之$broadcast、$emit、$on传值

    文件层级 index.html <!DOCTYPE html> <html ng-app="nickApp"> <head> <meta ...

  6. angular 的 @Input、@Output 的一个用法

    angular 使用 @input.@Output 来进行父子组件之间数据的传递. 如下: 父元素: <child-root parent_value="this is parent ...

  7. 本博文将一步步带领你实现抽屉官网的各种功能:包括登陆、注册、发送邮箱验证码、登陆验证码、页面登陆验证、发布文章、上传图片、form验证、点赞、评论、文章分页处理以及基于tronado的后端和ajax的前端数据处理。

    本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tronado的后端和ajax的 ...

  8. Django框架11 /form组件、modelForm组件

    Django框架11 /form组件.modelForm组件 目录 Django框架11 /form组件.modelForm组件 1. form组件介绍 2. form常用字段与插件 3. form所 ...

  9. Angular - - ngCloak、ngController、ngInit、ngModel

    ngCloak ngCloak指令是为了防止Angular应用在启动加载的时候html模板将会被短暂性的展示.这个指令可以用来避免由HTML模板显示造成不良的闪烁效果. 格式: ng-cloak   ...

随机推荐

  1. QT中LineEdit、TextEdit 、PlainTextEdit 三个控件的区别

    QLineEdit是单行文本输入,一般用于用户名.密码等少量文本交互地方.QTextEdit用于多行文本,也可以显示HTML格式文本.QPlainTextEdit与QTextEdit很像,但它多用于需 ...

  2. 将自己apk打包进其他apk安装思路

    把Apk 作为asset 资源编译进去,运行的时候释放出来再安装. dexclassloader加载. 动态加载. 把一个apk写成安装器,默认安装的话,需要root或者需要漏洞利用.

  3. adb not responding. if you'd like to

    在安装genymotion后启动工程报此错误. 解决方案:把其他虚拟机删掉,然后用genymotion新建一个,启动工程OK.

  4. Android - Get Bluetooth UUID for this device

    Stack Overflow is a community of 4.7 million programmers, just like you, helping each other. Join th ...

  5. c# winform 点击按钮切换tabcontrol标签

    this.tabControl1.TabPages.Remove(tabPage1); this.tabControl1.TabPages.Remove(tabPage2); this.tabCont ...

  6. Codeforces Round #368 (Div. 2)D. Persistent Bookcase DFS

    题目链接:http://codeforces.com/contest/707/my 看了这位大神的详细分析,一下子明白了.链接:http://blog.csdn.net/queuelovestack/ ...

  7. Android Studio的使用(一)--显示行号、快速查找方法源

    1.显示行号,只需要右击编辑窗体的边界就可以了.(这种方法只能临时显示,下次打开文件就没了,对其他文件也没用). 2.永久显示行号 3.查找某个变量.类.方法定义的源头,同时可以查找布局文件,资源文件 ...

  8. 项目经验分享——Java常用工具类集合 转

    http://blog.csdn.net/xyw591238/article/details/51678525 写在前面     本文涉及的工具类部分是自己编写,另一部分是在项目里收集的.工具类涉及数 ...

  9. h2database. 官方文档

    http://www.h2database.com/html/advanced.html http://www.h2database.com/html/tutorial.html#csv http:/ ...

  10. 系统管理员必须掌握的20个Linux监控工具

    需要监控Linux服务器系统性能吗?尝试下面这些系统内置或附件的工具吧.大多数Linux发行版本都装备了大量的监控工具.这些工具提供了能用 作取得相关信息和系统活动的量度指标.你能使用这些工具发现造成 ...