资源文件在范围上未定义

时间:2017-11-29 09:34:25

标签: angularjs angularjs-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;
}]);

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

1 个答案:

答案 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;
})