Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 是否可以在运行时设置调试日志级别?_Angularjs - Fatal编程技术网

Angularjs 是否可以在运行时设置调试日志级别?

Angularjs 是否可以在运行时设置调试日志级别?,angularjs,Angularjs,是否可以切换$logProvider.debugEnabled([flag])在运行时 当前情况: 在运行阶段从服务器加载角度客户端设置。取决于我要设置的设置方法$logProvider.debugEnabled([flag]) 提前谢谢你,Stevo对此的简短回答是:不,不是真的 一旦通过.config()块配置了应用程序,在应用程序启动后就不能进行进一步的配置 这是由于供应商的工作方式;它们仅在配置时可用。可能有一种方法可以强制配置,然后手动将新的$log服务重新注入到所有控制器中,但如果有

是否可以切换
$logProvider.debugEnabled([flag])在运行时

当前情况:

在运行阶段从服务器加载角度客户端设置。取决于我要设置的设置方法
$logProvider.debugEnabled([flag])


提前谢谢你,Stevo对此的简短回答是:不,不是真的

一旦通过
.config()
块配置了应用程序,在应用程序启动后就不能进行进一步的配置


这是由于供应商的工作方式;它们仅在配置时可用。可能有一种方法可以强制配置,然后手动将新的
$log
服务重新注入到所有控制器中,但如果有方法,我不确定如何执行。

我是通过

  • 手动将$cookies注入配置块,然后
  • 将其用作服务中的引用
  • 在所有读取位置引用服务变量

    '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;
        }
      };
    }]);
    

  • 我修饰了
    $log.debug(…)
    以在运行时更改日志级别

    通过查看,我想到了以下代码片段:

    (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");
    };
    
    如果本地存储器中的
    debugEnabled
    设置为
    true
    ,则装饰程序仅将调用转发到
    $log.debug
    ,该值可以通过
    ConfigService
    服务更改

    现在,您只需使用从服务器加载的值调用
    ConfigService#debugEnabled
    ,即可更改日志级别

    由于有了最后四行代码,您还可以在控制台上简单地调用
    cfg.debugEnabled(true)
    ,以便在运行时启用调试模式


    如果您不想在控制台中键入内容,可以避免使用全局
    cfg
    ,并使用javascript书签(或网站上的元素)更改日志级别。

    谢谢,我更改了应用程序配置。我基本上把设置放在一个JavaScript文件中,这样我在启动时就有了所有的设置。再次感谢!