AngularJS还是新手,我有以下情况......我正在寻找解决方案......
加载APP时(在显示任何屏幕之前) - 我需要加载以下内容(按照列表中所示的固定顺序):
因为属性文件将包含例如连接属性,所以加载此属性文件非常重要。在继续使用应用程序之前解析...
使用$routeProvider
我使用了以下来处理“解决”方法:
// routing
app.config(function($routeProvider) {
$routeProvider
// login
.when('/', {
templateUrl : 'pages/login.html',
controller : 'loginController',
resolve:{
// load properties
loadProperties: function(properties){
return properties.initProperties();
},
// load labels
loadLocalization: function(localize, properties){
console.log(properties.getProperties());
return localize.initLocalizedResources();
}
}
})
// dashboard
.when('/dashboard', {
templateUrl : 'pages/login.html'
})
});
'initLocalizedResources'方法:
initLocalizedResources: function(){
if (!localize.loadedFromRest){
localize.loading = true;
//$localStorage.restServer = "http://localhost:8084";
// var restServer = properties.getProperty('restServer') + '/WebSDPServiceMobileAPI/i18n/i18nlabels_get/culture/';
var restServer = 'http://localhost:3034';
var restServer = restServer + '/WebSDPServiceMobileAPI/i18n/i18nlabels_get/culture/';
var culture = 'en-gb';
if ($localStorage.language !== undefined)
culture = $localStorage.language.culture;
var restCall = restServer + culture;
logMessage(' - Localize - callRestServer called - : ' + restCall);
return $http.get(restCall)
.success(localize.successCallback)
.error(function(data, status){
// set the flag to keep from looping in init
localize.loadedFromRest = false;
localize.loading = false;
});
}
},
'属性'服务:
app.factory('properties', function($http){
var arrProperties = [];
return {
getProperties: function(){
return arrProperties;
},
getProperty: function(key){
return arrProperties[key];
},
addProperty: function(key, value){
console.log('add property : ' + key + ' - ' + value);
arrProperties[key] = value;
},
initProperties: function(){
return $http.get('serviceapp.properties').then(function (response) {
var props = response.data.split("\n");
for (var i = 0, len = props.length; i < len; i++) {
var value = props[i].split("=");
arrProperties[value[0]] = value[1];
}
console.log(arrProperties);
});
}
};
});
但我注意到Resolve
的顺序不是正确的顺序......
在initLocalizedResources
方法中记录属性时,它们仍然是[]
...在loginController
内记录'属性'时,它们正确地填充了数据......但是在某个阶段太远......
我需要完成的是在本地化标签(REST)之前加载属性......
我的解决方法的想法:
添加额外的route
以加载属性,并在完成导航到第二个route
时,它将加载本地化,然后继续/login route
加载后,手动引导AngularJS应用程序&amp;解析属性
如上所述,这些感觉和解决方法,......
有没有人有任何其他想法/提示或任何帮助?
谢谢
答案 0 :(得分:1)
我相信你可以这样做:
resolve:{
// load properties
loadProperties: function(properties){
return properties.initProperties();
},
// load labels
loadLocalization: function(localize, properties, loadProperties){
console.log(properties.getProperties());
return localize.initLocalizedResources();
}
}
注意,第二个解析如何依赖于loadProperties解析。
https://medium.com/opinionated-angularjs/advanced-routing-and-resolves-a2fcbf874a1c