根据参数配置$ logprovider

时间:2014-12-16 18:46:05

标签: angularjs

我想(默认情况下)隐藏调试语句

$logProvider.debugEnabled(false);

但我希望开发人员通过某种路径参数(或类似的东西)访问调试语句。我们有多个“Dev”服务器,希望快速浏览调试语句。

我想做的是给出了一个网址,例如:

myapp.com/mypage.html?debug=true

启用$ locationProvider进行调试。

我想做类似的事情:

$urlParams = $location.search();
if($urlParams.debug) {
    $logProvider.debugEnabled(true);
}
配置中的

...但我不能使用$ location注入...无论如何在配置部分做某种逻辑......或者更好的是,有没有办法在运行中配置和应用程序?

2 个答案:

答案 0 :(得分:0)

你可以使用UI-router例如这样的东西(coffeescript):

 'use strict'
 angular.module 'App'
 .config ($stateProvider, $urlRouterProvider) ->

   $stateProvider
   .state 'index',
     abstract: true
     url: '/'
     templateUrl: '<div ui-view></div>'
     controller: 'indexController'
     resolve:
       debugResolved: ($stateParams, $logProvider) ->
         if $stateParams.debug == 'true'
           $logProvider.debugEnabled(true)

这只是一个例子,我没有尝试过,但它应该按预期工作。 您可以在此处查看有关UI路由器的更多信息:https://github.com/angular-ui/ui-router

答案 1 :(得分:0)

所以我很遗憾无法使用UI.router的$ stateProvider获得上面/下面发布的解决方案。

以下是我提出的解决方案:

根据此处的解决方案创建我自己的Provider,其中包含一个获取Query Params的函数:  How can I get query string values in JavaScript?

app.provider("query",function(){
        return{
            getParamsByName: function(name){
                name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
                var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
                results = regex.exec(location.search);
                return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
            },

   $get: function(){ return {} }        
};
});

然后在我的控制器中我需要做的就是将queryProvider添加到config,

然后调用getParamsByName(&#34; debug&#34;)