2014-12-05 14 views

cevap

1

bunun için Kısa cevap: hayır, pek değil. Uygulamanız, .config() bloğunuzdan yapılandırıldıktan sonra, uygulama önyüklendikten sonra başka bir yapılandırma yapılamaz.

Bu, sağlayıcıların çalışma biçiminden kaynaklanmaktadır; Sadece yapılandırma zamanında kullanılabilirler. Yapılandırmayı zorlamak için bir yol olabilir ve sonra tüm denetleyicilerinize yeni $log hizmetini el ile yeniden enjekte edin, ancak bunu yapmanın bir yolu varsa, nasıl yapacağımı bilmiyorum.

+0

Teşekkürler, uygulama yapılandırmasını değiştirdim. Ayarı temel olarak bir JavaScript dosyasına koydum, böylece başlangıçta tüm ayarlarım var. Tekrar teşekkürler! – stevo

0

yaptım yolu kullanarak sonra

  • el kurabiye yapılandırma bloğuna $ enjekte

    1. tarafından olduğu bir hizmet içinde referans olarak.
    2. tüm okunan konumlarda servis varlığına atıfta bulunur.

      'use strict'; 
      app 
          .config(['$logProvider', function($logProvider){ 
          var $cookies; 
          angular.injector(['ngCookies']).invoke(['$cookies', function(_$cookies_) { 
           $cookies = _$cookies_; 
          }]); 
          var _enabled = $cookies.debugMode; 
          $logProvider.debugEnabled(_enabled); 
          }]) 
          .factory('DebugSvc', ['$cookies', 'HttpMonitorSvc',function ($cookies, HttpMonitorSvc) { 
          return { 
          httpMonitor: HttpMonitorSvc, 
          debugMode: $cookies.debugMode || 'inactive', 
          setDebugMode: function (mode) { 
           var _logEnabled = $cookies.debugMode; 
      
           switch(mode) { 
           case 'active': 
            _logEnabled = true; 
            break; 
           } 
           $cookies.debugMode = mode; 
           this.debugMode = mode; 
          } 
          }; 
      }]); 
      
  • 1

    Ben zamanında loglevel değiştirmek için $log.debug(...) dekore ettik.

    Enhancing AngularJS Logging using Decorators baktığımızda, aşağıdaki kod parçacığı için fikrim var:

    (function() { 
        var KEY = "debugEnabled"; 
    
        angular.module("service.config", []) 
         .config(function ($provide, $logProvider) { 
          // AngularJS has debug enabled by default, but just to be sure... 
          $logProvider.debugEnabled(true); 
    
          // Disabling localStorageDebug (if not set) 
          if (localStorage.getItem(KEY) === null) { 
           localStorage.setItem(KEY, "false"); 
          } 
    
          // add a check for localStorageDebug before actually calling $log.debug(...) 
          $provide.decorator('$log', function ($delegate) { 
           var debugFunction = $delegate.debug; 
    
           $delegate.debug = function() { 
            if (localStorage.getItem(KEY) !== "false") { 
             debugFunction.apply(undefined, arguments) 
            } 
           }; 
    
           return $delegate; 
          }); 
         }) 
         .service("ConfigService", function ($log) { 
          this.debugEnabled = function (flag) { 
           $log.info("Setting debugEnabled to " + flag); 
           localStorage.setItem(KEY, flag.toString()); 
          } 
         }); 
    })(); 
    
    // exposing ConfigService to global scope (be aware of possible clashes!), 
    // therefore making it easily accessible from the console 
    var cfg; 
    window.onload = function() { 
        cfg = angular.element(document.body).injector().get("ConfigService"); 
    }; 
    

    dekoratör sadece ileriye debugEnabled yerel depolama true olarak ayarlanırsa $log.debug çağrıları - değeri üzerinden değiştirilebilir ConfigService servisi.

    Artık, loglevel'i değiştirmek için sunucunuzdan yüklediğiniz değerle ConfigService#debugEnabled numaralı telefonu arayabilirsiniz.

    Son dört satır sayesinde, çalışma zamanında hata ayıklama modunu etkinleştirmek için konsolunuzda cfg.debugEnabled(true)'u da arayabilirsiniz.

    Konsola yazı yazmak istemiyorsanız, genel cfg'dan kaçınabilirsiniz ve günlük düzeyini değiştirmek için javascript yer işaretlerini (veya web sitenizdeki öğeleri) kullanabilirsiniz.

    İlgili konular