打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
angularjs的$compile用法

AngularJS里比较重要但又很少手动调用的要属$compile服务了,通常在写组件或指令时,都是angularjs自动编译完成的,但有时我们可能需要手动编译,比如封装一个table组件,根据参数实现自定义渲染,增加一列复选框或者一列按钮啥的,这是就需要用到$compile了。

基本使用方法

首先看个简单例子:

<!DOCTYPE html><html ng-app="myApp"><head>    <meta charset="UTF-8">    <title>angular</title>    <script src="libs/jquery.js"></script>    <script src="libs/angular.js"></script>    <script>        angular.module('myApp', [])            .controller('MyController', function ($scope, $compile) {                var vm = this;                vm.msg = 'hello';                // 创建编译函数                var compileFn = $compile('<div>{{appCtrl.msg}}</div>');                // 传入scope,得到编译好的dom对象(已封装为jqlite对象)                // 也可以用$scope.$new()创建继承的作用域                var $dom = compileFn($scope);                 // 添加到文档中                $dom.appendTo('body');                        })    </script></head><body ng-controller="MyController as appCtrl"></body></html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

通过$compile服务可以编译html字符串或dom对象或jqLite对象,然后得到一个编译函数,再传入$scope,就会在当前作用域进行编译,返回编译好的jqLite对象,这时就可以直接添加到文档中了(也可以先添加到文档再编译)。
编译的实质其实就是对dom对象解析,使dom对象与scope进行耦合,通过绑定可以实现数据的更新,像Vue其实也是一样的过程。

封装为指令

<!DOCTYPE html><html ng-app="myApp"><head>    <meta charset="UTF-8">    <title>angular</title>    <link rel="stylesheet" href="libs/bootstrap.css">    <script src="libs/jquery.js"></script>    <script src="libs/angular.js"></script>    <script>        angular.module('myApp', [])            .controller('MyController', function ($scope, $compile, $timeout) {                var vm = this;                vm.html = '<h1>{{title}}</h1>                            <ul>                                <li ng-repeat="item in items">{{item}}</li>                            </ul>'            })            .directive('compile', function($compile) {                return {                    scope: {                        compile: '='                    },                    link: function(scope, elem, attrs) {                        scope.title = 'list';                        scope.items = ['list1', 'list2', 'list3'];                        elem.html($compile(scope.compile)(scope))                    }                }            })    </script></head><body ng-controller="MyController as appCtrl">    <div compile="appCtrl.html"></div></body></html>
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
AngularJS自学之路(一)
AngularJS开发指南04:核心概览 | AngularJS中文社区
学习AngularJs:Directive指令用法(完整版)
关于 AngularJS 框架的使用有哪些经验值得分享? |
跟我学AngularJs:Service、Factory、Provider依赖注入使用与区别
AngularJS开发指南29:将服务注入到控制器中 | AngularJS中文社区
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服