Javascript 返回空对象的离子工厂

Javascript 返回空对象的离子工厂,javascript,angularjs,ionic-framework,Javascript,Angularjs,Ionic Framework,我可能在尝试一些不该尝试的东西。 我还没有完全意识到“单身”这件事 问题是,我有一个工厂,它支持从API获取一些json数据。 我从工厂得到一个空的东西 非常感谢您的帮助 .factory('specialities', function($http){ var specialities = []; return { getspecialities: function(){ $http({ method: '

我可能在尝试一些不该尝试的东西。 我还没有完全意识到“单身”这件事

问题是,我有一个工厂,它支持从API获取一些json数据。 我从工厂得到一个空的东西

非常感谢您的帮助

.factory('specialities', function($http){
    var specialities = [];
    return {
        getspecialities: function(){
            $http({
                method: 'GET',
                url: "https://mydomain.abc/Api/specialities",
                headers: {'Content-Type': 'application/x-www-form-urlencoded'}
            }).then(function successCallback(response) {    
                specialities = response.data.list;
            }, function errorCallback(response) {

            });
            return specialities;
        }  
    }               
})
这是我的控制器

.controller('loadingCtrl', ['$scope', '$stateParams', 'specialities', 'areas', '$timeout',
function ($scope, $stateParams, specialities, areas, $timeout) {
    $scope.specialities = specialities.getspecialities();
    $scope.areas = areas.getareas();
    //console.log($scope.areas);
     $scope.slide = function(){
         console.log($scope.specialities);
         console.log($scope.areas);
     }
     $timeout($scope.slide, 5000);
}])
我得到的只是控制台中的空数组,即使在超时之后也是如此。 请帮忙

多谢各位

----编辑 我正在尝试下面的代码。 控制器

.controller('loadingCtrl', ['$scope', '$stateParams', 'specialities', '$timeout', '$state',
function ($scope, $stateParams, specialities,  $timeout, $state) {  
    specialities.getspecialities().then(function(specialities)
    {
       $scope.specialities = specialities;
        console.log($scope.specialities);
    });
}])
.controller('loadingCtrl', ['$scope', '$stateParams', 'specialities', '$timeout', '$state',
function ($scope, $stateParams, specialities,  $timeout, $state) {  
    specialities.getspecialities(function(specialities)
    {
       $scope.specialities = specialities;
        console.log($scope.specialities);
    });
}]);
工厂

.factory('specialities', function($http, $q){
    return {
         getspecialities: function(){
            return $http({
                method: 'GET',
                url: "https://mydomain.abc/Api/specialities",
                headers: {'Content-Type': 'application/x-www-form-urlencoded'}
            }).then(function successCallback(response) {    
                return response.data.list;
            });
        } 
    }               
})

现在,控制台从不记录日志,工厂似乎没有被调用,因为API url没有被调用。

您的
$http
调用是异步的,并返回一个承诺

您的
return specialities
是在
$http
调用启动之后执行的,但在它实际完成工作之前执行

更改
getspecialities
函数以实际返回
$http
的返回值(这是一个承诺),并在调用该承诺时使用该承诺

服务:

.factory('specialities', function($http, $q){
    return {
        getspecialities: function(){
            return $http({
                method: 'GET',
                url: "https://mydomain.abc/Api/specialities",
                headers: {'Content-Type': 'application/x-www-form-urlencoded'}
            }).then(function successCallback(response) {    
                return response.data.list;
            };
        }  
    }               
})
控制器:

.controller('loadingCtrl', ['$scope', '$stateParams', 'specialities', 'areas', '$timeout',
function ($scope, $stateParams, specialities, areas, $timeout) {
    specialities.getspecialities().then(function(specialities)
    {
       $scope.specialities = specialities;
       ... any other stuff that needs to happen when you receive the value of specialities ...
    });
    ...

}])
试试这个

控制器

.controller('loadingCtrl', ['$scope', '$stateParams', 'specialities', '$timeout', '$state',
function ($scope, $stateParams, specialities,  $timeout, $state) {  
    specialities.getspecialities().then(function(specialities)
    {
       $scope.specialities = specialities;
        console.log($scope.specialities);
    });
}])
.controller('loadingCtrl', ['$scope', '$stateParams', 'specialities', '$timeout', '$state',
function ($scope, $stateParams, specialities,  $timeout, $state) {  
    specialities.getspecialities(function(specialities)
    {
       $scope.specialities = specialities;
        console.log($scope.specialities);
    });
}]);
服务

.factory('specialities', function($http, $q){
    return {
         getspecialities: function(callback){
            return $http({
                method: 'GET',
                url: "https://mydomain.abc/Api/specialities",
                headers: {'Content-Type': 'application/x-www-form-urlencoded'}
            }).then(function successCallback(response) {    
                return callback(response.data.list);
            });
        } 
    }               
})

我试过密码。但工厂的函数似乎没有被调用。我已经更新了我的答案以反映您的建议。添加更多日志以查看是否执行了代码路径。很可能您的
$http
调用返回一个错误(为每个
添加第二个函数,然后
并记录那里发生的情况以进行检查)。我非常激动,实际上没有更改域名。哈哈。它正在工作。谢谢你的帮助。