我想(默认情况下)隐藏调试语句
$logProvider.debugEnabled(false);
但我希望开发人员通过某种路径参数(或类似的东西)访问调试语句。我们有多个“Dev”服务器,希望快速浏览调试语句。
我想做的是给出了一个网址,例如:
myapp.com/mypage.html?debug=true
启用$ locationProvider进行调试。
我想做类似的事情:
$urlParams = $location.search();
if($urlParams.debug) {
$logProvider.debugEnabled(true);
}
配置中的...但我不能使用$ location注入...无论如何在配置部分做某种逻辑......或者更好的是,有没有办法在运行中配置和应用程序?
答案 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;)