DebugInfoEnabled для Angular 1.2

Angular 1.3 ввел новый метод debugInfoEnabled(), который может обеспечить повышение производительности, если вызвано с помощью false в конфигурации приложения:

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 при создании новых областей
  • не привязывать данные привязки и класс CSS класса ng к элементам с ngBind, ngBindHtml или {{...}} интерполяциями

В качестве одного из возможных вариантов я могу развернуть хранилище angularjs и вернуть его обратно в 1.2. Затем используйте поддерживающие обновления fork из восходящего потока.

Поблагодарили бы любые указатели.

Ответ 1

Используйте базовый метод DOM setAttribute, чтобы предотвратить поведение по умолчанию. Я отредактировал плункер в другом ответе:

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

сделать следующее:

  • Метод клонирования DOM setAttribute
  • Отмените его с помощью проверки атрибутов ng отладки
  • Возвращает 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);
}

Замените HTMLElement на Element для IE8.

Ссылки

Ответ 2

Вы можете отключить его, указав $logProvider.debugEnabled(true); внутри вашей конфигурации angular. Чтобы получить эффект от установки 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

Надеюсь, это поможет вам.