嗨,我正在尝试设置我需要的应用程序配置参数(全局配置参数)。
我试过这样:
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;
}