用于Angular 1.2的debugInfoEnabled

时间:2015-01-05 16:05:06

标签: javascript angularjs debugging internet-explorer-8 backport

Angular 1.3引入了一种新的debugInfoEnabled()方法,如果在application config function中使用false进行调用,可以提高性能:

myApp.config(['$compileProvider', function ($compileProvider) {
    $compileProvider.debugInfoEnabled(false);
}]);

此外,Angular 1.3放弃了IE8支持。这对我来说是一个问题,我的应用程序必须在IE8上运行。因此,我无法升级到角度1.3并且必须使用1.2。

有没有办法用angular 1.2实现相同的功能?

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

  • 在创建新范围时阻止创建ng-scope / ng-isolated-scope CSS类
  • 不要将绑定数据和ng-class CSS类附加到具有ngBind,ngBindHtml或{{...}}插值的元素

作为一种可能的选择,我可以分叉angularjs存储库并将该功能反向回1.2。然后,使用fork维护来自上游的更新。

不胜感激。

2 个答案:

答案 0 :(得分:5)

使用基础DOM setAttribute方法来防止默认行为。我在另一个答案中编辑了那个傻瓜:

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

执行以下操作:

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

按如下方式使用:

/* 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);
}

将IE HTMLElement替换为Element

<强>参考

答案 1 :(得分:1)

您可以尝试在角度配置中提及$logProvider.debugEnabled(true);来禁用它。 为了实现debugEnabled设置,您需要确保在使用$log提供程序时进行日志。

示例代码

var app = angular.module('myApp', []);

app.config(function($logProvider){
  $logProvider.debugEnabled(false);
});

app.controller('MainCtrl', function($scope, $log ) {
  $scope.name = 'Hello World!';
  $scope.testModel = {name: "test"};
  //console.log('This will show log even if debugging is disable');
  $log.debug('TEST Log');
});

这是 Fiddle

希望这会对你有帮助。