Angular 1.2 的 debugInfoEnabled
debugInfoEnabled for Angular 1.2
Angular 1.3引入了新的debugInfoEnabled()
method that can provide a boost in performance if called with false
in the application config function:
myApp.config(['$compileProvider', function ($compileProvider) {
$compileProvider.debugInfoEnabled(false);
}]);
另外,Angular 1.3 放弃了对 IE8 的支持。这对我来说是个问题,我的应用程序必须在 IE8 上运行。因此,我无法升级到 angular 1.3,只能使用 1.2。
有没有办法实现与 angular 1.2 相同的功能?
特别是,至少是 debugInfoEnabled()
的一部分:
- 防止在创建新范围时创建
ng-scope
/ng-isolated-scope
CSS classes
- 不要将绑定数据和 ng-class CSS class 附加到具有 ngBind、ngBindHtml 或 {{...}} 插值的元素
作为一种可能的选择,我可以分叉 angularjs 存储库并将该功能反向移植回 1.2。然后,使用 fork 从上游维护更新。
不胜感激。
您可以尝试通过在 angular 配置中提及 $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
希望这对您有所帮助。
使用底层 DOM setAttribute
方法来防止默认行为。我在另一个答案中编辑了 plunker:
http://plnkr.co/edit/cMar0d9IbalFxDA6AU3e?p=preview
执行以下操作:
- 克隆 DOM
setAttribute
原型方法
- 通过检查
ng
调试属性覆盖它
- Return
ng
调试属性为 false
- Return 正常,否则
使用方法如下:
/* 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
替换为 Element
。
参考资料
Angular 1.3引入了新的debugInfoEnabled()
method that can provide a boost in performance if called with false
in the application config function:
myApp.config(['$compileProvider', function ($compileProvider) {
$compileProvider.debugInfoEnabled(false);
}]);
另外,Angular 1.3 放弃了对 IE8 的支持。这对我来说是个问题,我的应用程序必须在 IE8 上运行。因此,我无法升级到 angular 1.3,只能使用 1.2。
有没有办法实现与 angular 1.2 相同的功能?
特别是,至少是 debugInfoEnabled()
的一部分:
- 防止在创建新范围时创建
ng-scope
/ng-isolated-scope
CSS classes - 不要将绑定数据和 ng-class CSS class 附加到具有 ngBind、ngBindHtml 或 {{...}} 插值的元素
作为一种可能的选择,我可以分叉 angularjs 存储库并将该功能反向移植回 1.2。然后,使用 fork 从上游维护更新。
不胜感激。
您可以尝试通过在 angular 配置中提及 $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
希望这对您有所帮助。
使用底层 DOM setAttribute
方法来防止默认行为。我在另一个答案中编辑了 plunker:
http://plnkr.co/edit/cMar0d9IbalFxDA6AU3e?p=preview
执行以下操作:
- 克隆 DOM
setAttribute
原型方法 - 通过检查
ng
调试属性覆盖它 - Return
ng
调试属性为 false - Return 正常,否则
使用方法如下:
/* 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
替换为 Element
。
参考资料