javascript – 用于角度1.2的debugInfoEnabled

前端之家收集整理的这篇文章主要介绍了javascript – 用于角度1.2的debugInfoEnabled前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Angular 1.3引入了一种新的 debugInfoEnabled()方法,可以提高性能,如果在 application config function
myApp.config(['$compileProvider',function ($compileProvider) {
    $compileProvider.debugInfoEnabled(false);
}]);

此外,Angular 1.3支持IE8.这对我来说是个问题,我的应用程序必须在IE8上运行.因此,我不能升级到角度1.3,必须生活在1.2.

有没有办法用角度1.2实现相同的功能

特别是debugInfoEnabled()的至少一部分:

>在创建新的范围时,阻止创建ng范围/ ng隔离范围的CSS类
>不要使用ngBind,ngBindHtml或{{…}}插值将绑定数据和ng类CSS类附加到元素

作为一个可能的选择,我可以将angularjs仓库分叉并将功能返回到1.2.然后,使用fork维护上游的更新.

会感激任何指针.

解决方法

使用底层的DOM setAttribute方法来防止默认行为.我在另一个答案中编辑了这个plunker:

http://plnkr.co/edit/cMar0d9IbalFxDA6AU3e?p=preview

做以下事情:

>克隆DOM setAttribute原型方法
>通过检查调试属性来覆盖它
>返回false为ng调试属性
>返回正常

使用如下:

/* Clone the original */
HTMLElement.prototype.ngSetAttribute = HTMLElement.prototype.setAttribute;

/* Override the API */
HTMLElement.prototype.setAttribute = function(foo,bar) {
/* Define ng attributes */ 
var nglist = {"ng-binding": true,"ng-scope":true,"ng-class":true,"ng-isolated-scope":true};

console.log([foo,bar]);

/* Block ng attributes; otherwise call the clone */
if (nglist[foo]) 
  return false; 
else if (JSON.stringify(nglist).match(foo) )
  return false;
else
  return this.ngSetAttribute(foo,bar);
}

用IE8替换元素的HTMLElement.

参考

> CSS classes used by angular
> Prototypes,Constructor Functions,and Taxidermy
> AngularJS IE8 Shim
> AngularJS IE8 Builds
> Document Object Model Prototypes
> Document Object Model Prototypes,Part 2: Accessor (getter/setter) Support
> What’s New in Internet Explorer 9

猜你在找的JavaScript相关文章