为什么在视图中无法从工厂获取数据?

时间:2014-12-23 23:31:44

标签: angularjs

我正在努力使用一个angularjs控制器,它不能为视图提供一些数据,我不明白为什么。

这是路线配置:

.when('/settings', {
                    templateUrl: 'views/settings.html',
                    controller: 'SettingsController',
                    access: {
                        authorizedRoles: [USER_ROLES.user]
                    }

我有一个控制器:

jhipsterApp.controller('SettingsController', function ($scope, Account,Countries) {
        $scope.success = null;
        $scope.error = null;
        $scope.settingsAccount = Account.get();
        $scope.countries  = Countries.get();

        $scope.save = function () {
            $scope.success = null;
            $scope.error = null;
            $scope.errorEmailExists = null;
            Account.save($scope.settingsAccount,
                function (value, responseHeaders) {
                    $scope.error = null;
                    $scope.success = 'OK';
                    $scope.settingsAccount = Account.get();
                },
                function (httpResponse) {
                    if (httpResponse.status === 400 && httpResponse.data === "e-mail address already in use") {
                        $scope.errorEmailExists = "ERROR";
                    } else {
                        $scope.error = "ERROR";
                    }
                });
        };
    });

和工厂:

jhipsterApp.factory('Account', function ($resource) {
        return $resource('app/rest/account', {}, {
        });
    });

jhipsterApp.factory('Countries', function ($resource,$http) {
   // return $resource('app/rest/countries', {}, { });
    return{
    get: function() {
        var promise = $http.get('app/rest/countries').then(function(response){
            return response.data;
        });
        return promise;
    }
    }
});

以下是我的观点:

 {{settingsAccount}}//  {{countries}}

我想显示由工厂检索的settingsAccount和国家/地区。 在浏览器中,我有以下结果:

{"login":"user","password":null,"firstName":null,"lastName":"User","email":null,"langKey":"en","roles":["ROLE_USER"],"country":""}// {}

我们可以看到settingsAccount已设置但没有国家/地区。我不明白为什么?

当我查看F12 Chrome工具时,我可以看到工厂提出的两个请求: settingsAccount countries

为什么国家/地区的数据在视图中不可用?

1 个答案:

答案 0 :(得分:1)

这是因为您的Countries.Get正在返回承诺而不是国家数组(并且也是异步的),您需要在承诺完成后填充国家/地区。

Countries.get().then(function (countries) {
    $scope.countries = countries;
});