指令续<AngularJs>

compile【object or function】

compile选项本身并不会被频繁使用,但是link函数则会被经常使用。本质上,当我们设置了link选项,实际上是创建了一个postLink() 链接函数,以便compile() 函数可以定义链接函数。通常情况下,如果设置了compile函数,说明我们希望在指令和实时数据被放到DOM中之前进行DOM操作,在这个函数中进行诸如添加和删除节点等DOM操作是安全的。

compile和link选项是互斥的。如果同时设置了这两个选项,那么会把compile所返回的函数当作链接函数,而link选项本身则会被忽略。

编译函数负责对模板DOM进行转换。链接函数负责将作用域和DOM进行链接。 在作用域同DOM链接之前可以手动操作DOM。在实践中,编写自定义指令时这种操作是非常罕见的,但有几个内置指令提供了这样的功能。

link

compile: function(tEle, tAttrs, transcludeFn) {
 //todo:
 return function(scope, ele, attrs) {
 // 链接函数
 };

链接函数是可选的。如果定义了编译函数,它会返回链接函数,因此当两个函数都定义时,编译函数会重载链接函数。如果我们的指令很简单,并且不需要额外的设置,可以从工厂函数(回调函数)返回一个函数来代替对象。如果这样做了,这个函数就是链接函数。

ngModel

它提供更底层的API来处理控制器内的数据,这个API用来处理数据绑定、验证、 CSS更新等不实际操作DOM的事情,ngModel 控制器会随 ngModel 被一直注入到指令中,其中包含了一些方法。为了访问ngModelController必须使用require设置.

ngModelController常用的元素如下:

  •  1.为了设置作用域中的视图值,需要调用 ngModel.$setViewValue() 函数。

$setViewValue() 方法适合于在自定义指令中监听自定义事件(比如使用具有回调函数的jQuery插件),我们会希望在回调时设置$viewValue并执行digest循环。

 angular.module(‘myApp‘)
        .directive(‘myDirective‘, function() {
            return {
                require: ‘?ngModel‘,
                link: function(scope, ele, attrs, ngModel) {
                    if (!ngModel) return;
                    $(function() {
                        ele.datepicker({                              //回调函数
                            onSelect: function(date) {
                                // 设置视图和调用 apply
                                scope.$apply(function() {
                                    ngModel.$setViewValue(date);
                                });
                            }
                        });
                    });
                }
            };
        });
  • 2.$render方法可以定义视图具体的渲染方式
  • 3.属性
    1. $viewValue
    $viewValue属性保存着更新视图所需的实际字符串。
    2. $modelValue
    $modelValue由数据模型持有。 $modelValue和$viewValue可能是不同的,取决于$parser流水线是否对其进行了操作。
    3. $parsers
    $parsers 的值是一个由函数组成的数组,其中的函数会以流水线的形式被逐一调用。ngModel 从DOM中读取的值会被传入$parsers中的函数,并依次被其中的解析器处理。
    4. $formatters
    $formatters的值是一个由函数组成的数组,其中的函数会以流水线的形式在数据模型的值发生变化时被逐一调用。它和$parser流水线互不影响,用来对值进行格式化和转换,以便在绑定了这个值的控件中显示。
    5. $viewChangeListeners
    $viewChangeListeners的值是一个由函数组成的数组,其中的函数会以流水线的形式在视图中的值发生变化时被逐一调用。通过$viewChangeListeners,可以在无需使用$watch的情况下实现类似的行为。由于返回值会被忽略,因此这些函数不需要返回值。
    6. $error
    $error对象中保存着没有通过验证的验证器名称以及对应的错误信息。
    7. $pristine
    $pristine的值是布尔型的,可以告诉我们用户是否对控件进行了修改。
    8. $dirty
    $dirty的值和$pristine相反,可以告诉我们用户是否和控件进行过交互。
    9. $valid
    $valid值可以告诉我们当前的控件中是否有错误。当有错误时值为false, 没有错误时值为true。
    10. $invalid
    $invalid值可以告诉我们当前控件中是否存在至少一个错误,它的值和$valid相反。 未完待续....

     备注:我也是刚刚开始学习,这一篇总结的不好,好多细节还需掌握好再次回顾补充,如果你喜欢本文的话,推荐共勉,谢谢!

时间: 2024-08-05 06:26:26

指令续<AngularJs>的相关文章

ng-app指令【angularJs第一篇】

angularJs共有4大模块构成MVC,模块和依赖注入.指令,双向数据绑定,虽然分为四大块但是我觉得无论使用那一块的知识都离不开指令,也就是说指令贯穿整个angularJs的应用.MVC里的控制器ng-controller是指令,获取.同步数据ng-model是指令:模块和依赖注入ng-app也是指令:双向数据绑定更不用说.所以说指令是angularJs的基础. ng-app ng-app这个指令比较特殊,一个html文档最好只出现一次,如果出现多次也是只有第一个起作用,并且可以出现在html

表单验证续&lt;AngularJs&gt;

前一篇文章说过,ng1.3+以后对于表单验证有了优化,它不再需要一个详细的表达式状态创建元素显示或隐藏. 例如:我们在ng1.3之前的版本都需要如下写法: <div class="error" ng-show="signup_form.name.$dirty && signup_form.name. $invalid && signup_form.submitted"> ng1.3之后新增了一个ngMessages指令,他

Vue指令续加组件

---恢复内容开始--- v-once指令 v-once:单独使用,限制的标签内容一旦赋值,便不可被动修改,也就失去了被动双向绑定的特性,如果是输入框,可以主动手动修改 示例: <div id="app"> <input type="text" v-model="msg"> <!-- 一旦赋值,只可主动更改 --> <input type="text" v-model="ms

ng-init 指令初始化 AngularJS 应用程序变量并支持html5

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title></title> <link rel="stylesheet" href=""> &l

JavaScript强化教程——AngularJS 指令

本文为 H5EDU 机构官方 HTML5培训 AngularJS 通过被称为 指令 的新属性来扩展 HTML. AngularJS 通过内置的指令来为应用添加功能. AngularJS 允许你自定义指令. AngularJS 指令 AngularJS 指令是扩展的 HTML 属性,带有前缀 ng-. ng-app 指令初始化一个 AngularJS 应用程序. ng-init 指令初始化应用程序数据. ng-model 指令把元素值(比如输入域的值)绑定到应用程序. 完整的指令内容可以参阅 An

AngularJS 指令

AngularJS 指令 AngularJS 通过被称为 指令 的新属性来扩展 HTML. AngularJS 通过内置的指令来为应用添加功能. AngularJS 允许自定义指令. AngularJS 指令是扩展的 HTML 属性,带有前缀 ng-. ng-app 指令初始化一个 AngularJS 应用程序. ng-init 指令初始化应用程序数据. ng-model 指令把元素值(比如输入域的值)绑定到应用程序. 实例 <div ng-app="" ng-init=&quo

AngularJS 指令应用

AngularJS 指令 AngularJS 通过被称为 指令 的新属性来扩展 HTML. AngularJS 指令 AngularJS 指令是扩展的 HTML 属性,带有前缀 ng-. ng-app 指令初始化一个 AngularJS 应用程序. ng-init 指令初始化应用程序数据. ng-model 指令把元素值(比如输入域的值)绑定到应用程序. <div ng-app="" ng-init="firstName='John'"> <p&g

AngularJS之指令中controller与link(十二)

前言 在指令中存在controller和link属性,对这二者心生有点疑问,于是找了资料学习下. 话题 首先我们来看看代码再来分析分析. 第一次尝试 页面: <custom-directive></custom-directive> 脚本: angular .module('app',[]) .directive('customDirective', customDirective); function customDirective() { var directive = { r

AngularJS指令的详解

指令作为AngularJS中最为重要的部分,所以这个框架本身也是自带了比较多的的指令,但是在开发中,这些指令通常不能满足我们的需要,所以我们也是需要自定义一些指令的.指令是我们用来扩展浏览器能力的技术之一.在DOM编译期间,和HTML元素关联着的指令会被检测到,并且被执行.这使得指令可以为DOM指定行为,或者改变它. angular在编译期间,编译器会用$interpolate服务去检查文本中是否嵌入了表达式.这个表达式会被当成一个监视器一样注册,并且作为$digest循环中的一部分,它会自动更