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

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

hot3.png

$compile服务会遍历DOM树并搜索它找到的所有指令,然后将所有这些指令的链接函数合并为一个单一的链接函数。

然后这个链接函数会将编译好的模版链接到$rootScope中。

他会通过检查DOM属性,注释,类以及DOM元素名称的方式查找指令。

ps

angular的事件循环被称为 $digest 循环。

$digest分为两个小型循环 $watch  evalAsync      

案例

angular.module('app',[]).directive('jxBindCompiledHtml',function($compile){    return {        template:'
',        scope:{            rawHtml:'=jxbBindCompiledHtml'        },        link:function(scope,elem,attrs){            scope.$watch('rawHtml,function(value){                if(!value) return;                                // 这边就是利用$compile 来实现 展示html 数据的。                var newElement = $compile($.parseHTML(value))(scope.$parent);                elem.contents().remove();                elem.append(newElement);                        })        }    }})

使用 $compile 可以动态的编译服务器端返回的html片段,比如html片段中还有类似 ng-click 代码的话,必须使用$compile来执行动态编译才能够将ng-click动态编译上去。

案例:

    
    
     
    angular.module('compileExample', [], function ($compileProvider) {    // configure new 'compile' directive by passing a directive    // factory function. The factory function injects the '$compile'    $compileProvider.directive('compile', function ($compile) {        // directive factory creates a link function        return function (scope, element, attrs) {            scope.$watch(function (scope) {                // watch the 'compile' expression for changes                return scope.$eval(attrs.compile);            }, function (value) {                // when the 'compile' expression changes                // assign it into the current DOM                element.html(value);                // compile the new DOM and link it to the current                // scope.                // NOTE: we only compile .childNodes so that                // we don't get into infinite loop compiling ourselves                $compile(element.contents())(scope);            });        };    });}).controller('GreeterController', ['$scope', function ($scope) {    $scope.name = 'Angular';    $scope.html = 'Hello ';}]);

PS:还有需要注意的就是,对于使用了$compile之后,有的是需要执行$scope.$digest() 方法执行下脏检查的。

转载于:https://my.oschina.net/bosscheng/blog/512874

你可能感兴趣的文章
springMVC和struts2有什么不同?为什么要用springMVC或者struts2?让你实现一个MVC框架大概如何设计?...
查看>>
微信JSApi支付~坑和如何填坑
查看>>
使用 iview Table 表格组件修改操作的显示隐藏
查看>>
招银网络科技笔试题
查看>>
onTouch和onTouchEvent
查看>>
八进制转十进制
查看>>
mssqll2008下只显示相关的登陆操作
查看>>
网站物理路径查找思路
查看>>
App引流增长技术:Deeplink(深度链接)技术
查看>>
赠云风大侠
查看>>
thinkphp留言板开发笔记 1 - 新的
查看>>
DEDECMS中,引入文件
查看>>
运维mysql基础
查看>>
初入前端9
查看>>
animation动画
查看>>
Ubuntu下系统自带截图设置
查看>>
solr6.6初探之查询篇
查看>>
Qt程序打包成exe可执行文件
查看>>
MongoDB基础之 安装
查看>>
Django model进阶
查看>>