Javascript 无法将角度工厂数据获取到控制器中
试图从工厂获取数据并将其传递到控制器,然后用于ng重复。不确定原因,但控制器从未运行在工厂中建立的功能 控制器Javascript 无法将角度工厂数据获取到控制器中,javascript,angularjs,Javascript,Angularjs,试图从工厂获取数据并将其传递到控制器,然后用于ng重复。不确定原因,但控制器从未运行在工厂中建立的功能 控制器 angular.module('myApp').controller('AppController',['$scope','ItemsFactory', function($scope,ItemsFactory){ ItemsFactory.getItems(function(err, data){ $scope.items = data; cons
angular.module('myApp').controller('AppController',['$scope','ItemsFactory',
function($scope,ItemsFactory){
ItemsFactory.getItems(function(err, data){
$scope.items = data;
console.log('controller items', $scope.items);
});
}]);
angular.module('myApp').controller('AppController',['$scope','ItemsFactory',
function($scope, ItemsFactory){
ItemsFactory.getItems(function(err, data){
$scope.items = data;
console.log('controller items', $scope.items);
});
}]);
工厂
angular.module('myApp').factory('ItemsFactory', function($http){
var getItems = function(){
$http({
method: 'GET',
url: 'js/data/data.min.json'
}).then(function success(response, data){
var results = response.data;
console.log('factory results', results);
}, function error(response){
console.log('error getting items');
});
};
return{
getItems: getItems
};
});
angular.module('myApp').factory('ItemsFactory', function($http){
var getItems = function(callback){
$http({
method: 'GET',
url: 'js/data/data.min.json'
}).then(function success(response, data){
var results = response.data;
if(callback) callback(null, results);
}, function error(response){
console.log('error getting items');
});
};
return{
getItems: getItems
};
});
下面是一些其他发布的示例,但似乎也没有任何效果
angular.module('myApp').factory('ItemsFactory', function($http){
var getItems = function(){
$http({
method: 'GET',
url: 'js/data/data.min.json'
}).then(function success(response, data){
var results = response.data;
console.log('factory results', results);
}, function error(response){
console.log('error getting items');
});
};
return{
getItems: getItems
};
});
angular.module('myApp').factory('ItemsFactory', function($http){
var getItems = function(callback){
$http({
method: 'GET',
url: 'js/data/data.min.json'
}).then(function success(response, data){
var results = response.data;
if(callback) callback(null, results);
}, function error(response){
console.log('error getting items');
});
};
return{
getItems: getItems
};
});
控制器
angular.module('myApp').controller('AppController',['$scope','ItemsFactory',
function($scope,ItemsFactory){
ItemsFactory.getItems(function(err, data){
$scope.items = data;
console.log('controller items', $scope.items);
});
}]);
angular.module('myApp').controller('AppController',['$scope','ItemsFactory',
function($scope, ItemsFactory){
ItemsFactory.getItems(function(err, data){
$scope.items = data;
console.log('controller items', $scope.items);
});
}]);
您需要定义回调参数,并在获得结果后“调用”回调:
angular.module('myApp').factory('ItemsFactory', function($http){
var getItems = function(cback){
$http({
method: 'GET',
url: 'js/data/data.min.json'
}).then(function success(response, data){
var results = response.data;
console.log('factory results', results);
if (cback) cback(null, results);
}, function error(response){
console.log('error getting items');
if (cback) cback(response, null);
});
};
return{
getItems: getItems
};
});
您需要定义回调参数,并在获得结果后“调用”回调:
angular.module('myApp').factory('ItemsFactory', function($http){
var getItems = function(cback){
$http({
method: 'GET',
url: 'js/data/data.min.json'
}).then(function success(response, data){
var results = response.data;
console.log('factory results', results);
if (cback) cback(null, results);
}, function error(response){
console.log('error getting items');
if (cback) cback(response, null);
});
};
return{
getItems: getItems
};
});
您在这里混合了callback和promise调用方法的风格。您似乎希望将回调传递给getItems(getItems不接受任何参数),并使用工厂中基于承诺的结果(尽管您不返回任何承诺) 决定你想做什么。如果要使用承诺表单,请执行以下操作(为了简单起见): 在控制器中,使用then或error函数执行某些操作
ItemsFactory.getItems().then(function(response) {
$scope.items = response.data;
})
.catch(function(response) {
console.error('error', response.status, response.data);
})
您在这里混合了callback和promise调用方法的风格。您似乎希望将回调传递给getItems(getItems不接受任何参数),并使用工厂中基于承诺的结果(尽管您不返回任何承诺) 决定你想做什么。如果要使用承诺表单,请执行以下操作(为了简单起见): 在控制器中,使用then或error函数执行某些操作
ItemsFactory.getItems().then(function(response) {
$scope.items = response.data;
})
.catch(function(response) {
console.error('error', response.status, response.data);
})
您应该使用从
$http
返回的承诺,而不是使用回调。只需返回$http()
的结果,就可以调用.then()
来获取数据
工厂:
angular.module('myApp').factory('ItemsFactory', function($http){
var getItems = function(){
return $http({
method: 'GET',
url: 'js/data/data.min.json'
}).then(function success(response){
return response.data;
}, function error(response){
console.log('error getting items');
});
};
return{
getItems: getItems
};
});
控制器:
angular.module('myApp').controller('AppController',['$scope','ItemsFactory',
function($scope,ItemsFactory){
ItemsFactory.getItems().then(function (data) {
$scope.items = data;
});
}]);
您应该使用从
$http
返回的承诺,而不是使用回调。只需返回$http()
的结果,就可以调用.then()
来获取数据
工厂:
angular.module('myApp').factory('ItemsFactory', function($http){
var getItems = function(){
return $http({
method: 'GET',
url: 'js/data/data.min.json'
}).then(function success(response){
return response.data;
}, function error(response){
console.log('error getting items');
});
};
return{
getItems: getItems
};
});
控制器:
angular.module('myApp').controller('AppController',['$scope','ItemsFactory',
function($scope,ItemsFactory){
ItemsFactory.getItems().then(function (data) {
$scope.items = data;
});
}]);
谢谢你的回答,对回电和承诺感到困惑。使用
$http
承诺更清晰谢谢你的回答,对回电和承诺感到困惑。使用$http
承诺更清晰我可以看到你在说什么,并可以将其缩短为<代码>返回$http.get('js/data/data.min.json')代码>我知道你在说什么,可以把它缩短为<代码>返回$http.get('js/data/data.min.json')代码>谢谢你的回答,结合你和@Robert Moskal的理解。我也试过了,工作正常,帮助我理解了整个回调和承诺。谢谢你的回答,结合你和@Robert Moskal的意思。我也尝试过,工作正常,帮助我理解整个回调和承诺。