vm.msg = 'hello'; // 创建编译函数 var compileFn = $compile('{{ctrl.msg}}'); // 传入scope,得到编译好的dom对象(已封装为jqlite $new()创建继承的作用域 var $dom = compileFn($scope); //返回的$dom是一个jQLite(jQuery的子集)对象 console.log($dom); // 添加到文档中 var jqLite = angular.element(document.getElementById("addEle")); jqLite.append($dom) ; //$dom.remove(); //移除语句 }); script> 复制代码 5、jqLite的应用 var jqEle = $("#myDiv"); //jquery写法 var jqLite = angular.element(document.getElementById("myDiv")); //jqlite写法 6、过滤器 常用的一些过滤器,也可以自己封装 和 补充 service
jqLite:向jQuery致敬 在DOM操作方面,没有人比jQuery做的更好。AngularJS以一种特殊的方式 向jQuery表达了敬意:内置精简版的jQuery - jqLite。 和jQuery一样,jqLite兼容多个浏览器。 jqLite以angular.element接口提供出来,兼容jQuery API的一个子集。 在AngularJS的所有API中的element对象,都不是纯粹的DOM对象,而是经过jqLite 封装过的。 选择符的问题 从开发者的角度,jqLite最明显的精简是不支持选择符。 AngularJS自动地将jqLite升级成jQuery,angular.element等同于 $ 。 这样又可以使用熟悉的选择符了。 扩展的事件 jqLite还提供一个$destroy事件,当DOM对象被从DOM树删除时,AngularJS将触发 这个事件,以便指令进行一些善后清理工作。
directive; if (jqLiteIsTextNode(directiveValue)) { $template = []; } else { $template = jqLite origAsyncDirective.replace) { if (jqLiteIsTextNode(content)) { $template = []; } else { $template = jqLite linkNode = jqLiteClone(compileNode); } replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode ), linkNode); // Copy in CSS classes from original node safeAddClass(jqLite(linkNode), oldClasses
于是开始Google资料,终于找到了问题所在的原因,原因是Angular JS框架使用了"轻量级的JQuery" - JqLite来处理页面,Jqlite是不会去执行样式页面(template)中的script 而且关键的是,在Script调用顺序中,如果你把JQuery放在了Angular JS前面调用(例如本文开头时我的做法),Angular JS会检查是否有JQuery存在,如果JQuery存在,则不使用内部的JqLite 但这样不好,原因是Angular JS仍使用内部的JqLite,导致如果你想在Template Html中执行<script>变得不可能。 总结: 在Google时,发现这个问题还是蛮多人遇到的。 这个解决方法我也是Google得来,下次有空要去了解下Angular JS的源码,来验证下JqLite的具体情况。
如果以后依赖的是Zepto/jqlite,你只需要改下参数就行了,在这种极端的情况下,降低了代码修改和可复用成本。
* text node */ && node.nodeValue.match(/\S+/) /* non-empty */ ) { $compileNodes[index] = node = jqLite $$element = jqLite(document.createComment(' ' + directiveName + ': ' + templateAttrs[directiveName] + ' ')); compileNode = $compileNode[0]; replaceWith(jqCollection, jqLite nonTlbTranscludeDirective: nonTlbTranscludeDirective }); } else { $template = jqLite
P85 Angular自动检测,如果发现引入了完整的jQquery库, 它就不会使用自己的jQlite实现。
scope.message = '请输入用户名'; 71 } 72 }); 73 74 // angular 基本不用操作DOM,如果必要,可以使用angular提供的jqlite
23.解释jQLite。 jQlite也称为 jQuery lite是jQuery的子集,包含其所有功能。默认情况下,它打包在Angular中。它帮助Angular以兼容的跨浏览器方式操作DOM。 jQLite基本上仅实现最常用的功能,因此占用空间小。 24.解释Angular中的摘要循环过程? Angular中的摘要周期是监视监视列表的过程,以跟踪监视变量的值的变化。
如果使用原生的JS的话操作过于麻烦,所以大家一般都是使用jQuery,jQuery虽然好用,但是AngularJs是不建议和JQuery同时使用的,所以AngularJs给我们也提供了一些操作DOM的方法———Jqlite
var compileFn = $compile('
{{appCtrl.msg}}
'); // 传入scope,得到编译好的dom对象(已封装为jqlite // 添加到文档中 $dom.appendTo('body'); }) 通过$compile服务可以编译html字符串或dom对象或jqLite 对象,然后得到一个编译函数,再传入$scope,就会在当前作用域进行编译,返回编译好的jqLite对象,这时就可以直接添加到文档中了(也可以先添加到文档再编译)。element: 包含指令的DOM元素的引用, link 方法一般通过jQuery 操作实例(如果没有加载jQuery,还可以使用Angular's jqLite )。
$watch("title", function () { // NOTE: this requires jQuery (jQLite won't do html) var
是angular作用域对象 element is the jqLite-wrapped element that this directive matches.是一个指令匹配到的那个jqLite包装后的元素
$document A jQuery or jqLite wrapper for the browser’swindow.document object.
安装 请求与响应 路由 静态文件 文件上传 Cookiet管理 AngularJS实战开发 单页应用 MVC 常用指令 双向绑定和单向绑定 模块 控制器controller $watch 自定义指令 jqLite