Javascript 返回空对象的离子工厂
我可能在尝试一些不该尝试的东西。 我还没有完全意识到“单身”这件事 问题是,我有一个工厂,它支持从API获取一些json数据。 我从工厂得到一个空的东西 非常感谢您的帮助Javascript 返回空对象的离子工厂,javascript,angularjs,ionic-framework,Javascript,Angularjs,Ionic Framework,我可能在尝试一些不该尝试的东西。 我还没有完全意识到“单身”这件事 问题是,我有一个工厂,它支持从API获取一些json数据。 我从工厂得到一个空的东西 非常感谢您的帮助 .factory('specialities', function($http){ var specialities = []; return { getspecialities: function(){ $http({ method: '
.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
调用返回一个错误(为每个添加第二个函数,然后并记录那里发生的情况以进行检查)。我非常激动,实际上没有更改域名。哈哈。它正在工作。谢谢你的帮助。