资源文件在范围内未定义

Resource file is undefined on scope

我有一个资源文件有时被读取,有时未定义并导致所有应用程序崩溃。我不知道为什么它有时只起作用,这让我很难找到解决方案。在我的控制器上,我正在传递我创建的服务来读取 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;
}]);

就像我说的,有时它没有任何问题,但有时当我在控制器中到达片段 eof 代码 $scope.appResources 时,appResources 是未定义的。我认为这可能是因为它在读取文件之前到达那里,但我无法找到避免它的解决方案。

你们工厂应该return一个承诺。 处理数据是控制器的工作。 (我使用 $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 解决控制器内部的承诺以获取数据并设置您的范围。

appResourcesServiceFactory.getResources().then(function(data) {
   $scope.appResources = data;
})