AngularJS - 为所有应用程序环境动态设置配置参数



嗨,我正在尝试设置我需要的应用程序配置参数(全局配置参数)。

我试过这样:

http://pastebin.com/PdQrzLT5

然后

<html ng-controller="ConfigController">

但这行不通,因为我每次刷新页面或每次更改路线时都需要刷新 exmaple $location.$$path。

我想设置一个配置参数列表,使它们全局化,以便在视图中使用它们,并在应用程序.js enteire 文件中使用它们。

你通常怎么做?

解决方案:

  • 我使用$rootScope进行全局配置(不需要另一个控制器)
  • 您应该使用$routeChangeStart/$routeChangeSuccess更新全局路由配置。
  • 使用$location.path()而不是$location.$$path
  • 使用$location.url()而不是$location.$$url

您可以在运行块中收听$routeChangeStart event,如下所示:

app.run(function($rootScope, $location){
var update =  function (){
$rootScope.config = {
appname: "Ouch" ,
appurl: $location.url(),
apppath: $location.path()
}
}  
$rootScope.$on('$routeChangeStart', update)
update();
})

这是最佳实践吗?

我的
  • 方法是使用使我的应用程序简单明了的东西。
  • 如果我有全局对象,必须在我的视图中到处绑定,那么$rootScope就是胶水。
  • 如果我只需要将值绑定到某些元素,我会在指令中使用$route events

带有指令的示例

app.directive('routeConfig', function($rootScope, $location){   
return {
scope: {},
templateUrl: "config-route.html",
link: function(scope, elm, attrs){
var update =  function (){
$scope.config = {
appname: "Ouch" ,
appurl: $location.url(),
apppath: $location.path()
}
}  
$scope.$on('$routeChangeStart', update)
update();
}
}
});

配置路由.html:

<h1>route:</h1>
<ul>
<li> name: {{ config.appname}} </li>
<li> url: {{ config.appurl}} </li>
<li> path: {{ config.apppath}} </li>
</ul>

您可以使用服务,例如:

var cmnApp = angular.module('cmnApp',[]);
cmnApp.factory('UserService', function() {
return {
name : 'Some Name'
};
});

在某些控制器中:

function someCtrl($scope, UserService) {
$scope.name = UserService.name;
}

最新更新