• angularJS中directive指令笔记


    directive用来解决什么问题?

    指令,可以简单理解为在DOM元素上运行的函数,指令可以扩展该DOM元素的功能。

    我们可以封装公共指令,比如分页指令、自动补全指令等等。

    1. 使Html更具语义化,不需要深入研究代码和逻辑即可知道页面的大致逻辑。
    2. 抽象一个自定义组件,在其他地方进行重用。

    myModule.directive('namespaceDirectiveName', function factory(injectables) {
       var directiveDefinitionObj = {
           restrict: "E", //ele, attr, class, m(comments), 或者任意组合。推荐用A,有比较好的跨浏览器兼容性。
           priority: 1, //number, 设置模板中相对于其他元素指令的执行顺序,默认为0.优先级最低
           template: "string", //内联模板,和url模板二选一。
           templateUrl: "url", //url模板。可预先缓存模板来减少http请求,提高性能。
           replace: true, //bool值,替换或者追加(默认)。
           transclude: true, //默认false 是否保留自定义标签的原始内容,在模板中通过ng-transclude指令,替换/追加内容?
            //是否需要将指令内部的元素(注意不是指令的模板)嵌入到模板。在ng-transclude位置。
           //会导致在控制器中无法正常监听数据模型的变化
    
           scope:true,
           //bool or {}空对象, 是否创建新作用域。创建隔离作用域,表示新作用域与父作用域隔离,可正常执行不受外部工作环境影响
           //意味指令有了一个自己的$scope对象。 这个对象只能在指令的方法或模板字符串使用。
    
           controller:function controllerConstructor($scope, $element, $attrs, $transclude) {
                //...为跨指令通信创建一个发布的API
           },
           require: "string", //字符串/数组。需要其他指令服务于这个指令来正确的发挥作用,并会作为link函数的第四个参数
           //前缀:?当前指令无控制器,会将null作为link第四个参数。^在上游指令链中查找控制器。
           // ?^ 组合两个前缀,可选择加载需要的指令并在父指令链中进行查找。不加前缀,又找不到控制器,就会抛出错误。
           link:function postLink(scope, iElement, iAttrs) {
               //...以编程的方式修改生成的DOM元素实例,添加事件监听,数据绑定。执行多次。从模板创建的视图实例获得元素和属性
           },
           compile:function compile(tElement, tAttrs, transclude) {
               //仅在编译阶段执行一次,处理模板自身的转换。在编译阶段,作用域还不存在。
               //为了提升效率,自定义标签的实例中需要修改的公共属性,在compile中处理
               return {
                   pre: function preLink(scope, iElement, iAttrs, controller) {
                       //...
                   },
                   post:function postLink(scope, iElement, iAttrs, controller) {
                       //...
                   }
               }
           }
       };
       return directiveDefinitionObj;
    });

     IDE推荐webstorm, 因为它是一个继承了angularJS,有非常强大的代码补全功能。比如输入ngdc,

    再回车或者tab键,获取以下这段代码,可以节省好多一个字一个字敲代码的时间,超赞有木有...

        directive('', function factory() {
            var directiveDefinitionObject = {
                
                compile
            :
            function compile(tElement, tAttrs, transclude) {
                
                return function (scope, element, attrs) {
                }
            }
        }
            ;
            return directiveDefinitionObject;
        })

     ngm: angular.module('', []);

    ngrw:

    $routeProvider.when('', {
            templateUrl: '',
            controller: ''
        });

    ngro: $routeProvider.otherwise({redirectTo: ''});

    ngrwr:

     $routeProvider.when('', {
            templateUrl: '',
            controller: '',
            resolve: {}
        });



  • 相关阅读:
    java spring-mvc + maven + hibernate + mysql 注释
    c# log4net
    c# winform richtextbox 锁屏和滚屏
    socket 客户端
    c# winform插件
    c# 注册全局热键
    c# 请求api获得json数据
    java 把一个文件夹里图片复制到另一个文件夹里
    c# UpdateLayeredWindow异形窗口
    【哈希】身份证问题
  • 原文地址:https://www.cnblogs.com/dodocie/p/6702643.html
Copyright © 2020-2023  润新知