我有一个有时被读取的资源文件,有时是未定义的并且崩溃了所有应用程序。我不知道为什么它有时只能起作用,这让我很难找到解决办法。在我的控制器上,我传递了我创建的服务来读取文件appResourcesService
:
app.controller('CommonController', ['$scope', '$location', 'appResourcesService',
function ($scope, $location, appResourcesService)
读取资源的服务如下:
'use strict';
app.factory('appResourcesService', ['$resource', function ($resource) {
var appResourcesServiceFactory = {};
appResourcesServiceFactory.getResources = function ($scope, language, locale) {
var languageFilePath = 'resources/AppResources.json';
$resource(languageFilePath).get().$promise.then(function (data) {
$scope.appResources = data;
}, function (reason) {
var defaultLanguageFilePath = 'resources/AppResources.json';
$resource(defaultLanguageFilePath).get(function (data) {
$scope.appResources = data;
});
});
};
return appResourcesServiceFactory;
}]);
就像我说的,有时它没有任何问题,但有时当我在控制器中达到代码$scope.appResources
时,appResources是未定义的。我认为这可能是因为它在读取文件之前到达那里,但我无法找到避免它的解决方案。
答案 0 :(得分:2)
你的工厂应该回复一个承诺。 这是控制器处理数据的工作。 (我使用$ http,因为它更干净)
app.factory('appResourcesService', ['$http', function($http) {
var appResourcesServiceFactory = {};
appResourcesServiceFactory.getResources = function () {
var languageFilePath = 'resources/AppResources.json';
return $http.get(languageFilePath).then(function(response) {
return response.data;
});
)};
return appResourcesServiceFactory;
}]);
使用.then解析控制器内的promise以获取数据并设置范围。
appResourcesServiceFactory.getResources().then(function(data) {
$scope.appResources = data;
})