【发布时间】:2015-10-08 06:00:15
【问题描述】:
在 AngularJS 中存储应用程序配置设置的最佳位置是什么?这可能是应用程序常量、查找等内容,可以从控制器和服务或工厂中使用。我可以创建一个单独的服务来存储和检索这些东西,但我想知道是否还有其他合适的地方来存储和检索这些东西。
【问题讨论】:
标签: javascript angularjs
在 AngularJS 中存储应用程序配置设置的最佳位置是什么?这可能是应用程序常量、查找等内容,可以从控制器和服务或工厂中使用。我可以创建一个单独的服务来存储和检索这些东西,但我想知道是否还有其他合适的地方来存储和检索这些东西。
【问题讨论】:
标签: javascript angularjs
您可以使用constant() 提供程序!
app.constant('myAppConfig', {ver: '1.2.2', bananas: 6, hammocks: 3, bananaHammocks: true});
这与 Terry 的解决方案并没有太大的不同,但常量不会改变,因此它们会在其他提供程序之前应用。此外,该模块可以注入到您的配置函数中。
app.config(function(myAppConfig){
console.log(myAppConfig.bananaHammocks);
});
玩得开心
【讨论】:
app.config('myAppConfig', function(myAppConfig){ console.log(myAppConfig.bananaHammocks); });,否则您在控制台中有“未捕获的错误:[$injector:modulerr]”。
不确定是否有“最佳方式”,但我个人使用服务,这是一个缩写示例:
angular.module('myApp').factory('AppSettings', function() {
return {
language: 'en'
}
});
angular.module('myApp').controller('myController', ['AppSettings',
function(AppSettings) {
$scope.language = AppSettings.language;
}
]);
【讨论】:
您也可以使用provider 代替service,并且在任何地方都可以轻松使用。
angular.module('App', []).provider('config',
function() {
var conf = {
ver: '1.2.2',
bananas: 6,
hammocks: 3,
bananaHammocks: true,
baseUrl:'data/'
};
conf.$get = function () {
delete conf.$get;
return conf;
};
return conf;
});
然后在配置中使用configProvider:
angular.module('App').config( function(configProvider) {} );
在运行中,控制器、服务等为config:
angular.module('App').run( function(config) {} );
【讨论】:
定义:
angular.module('starter.config', [])
.constant('appConfig', {
'backend': 'http://localhost:3000/v1'
});
用法:
angular.module('starter.services', ['starter.config'])
.factory('Locations', function(appConfig, $http) {
return {
all: function(successCb, errorCb) {
$http.get(appConfig.backend + '/locations.json')
.success(successCb)
.error(errorCb);
},
get: function(locationId, successCb, errorCb) {
$http.get(appConfig.backend + '/locations/'+ locationId +'.json')
.success(successCb)
.error(errorCb);
}
};
})
【讨论】:
添加它以访问全局变量
app.run(function ($rootScope) {
$rootScope.globalVariable = 'Amadou'; //global variable
});
现在,如果您想从控制器中使用它
function appNameCtrl($scope, $rootScope){
$rootScope.globalVariable = 'Modji';
}
在你看来
My name is {{globalVariable}}
【讨论】: