我是角度js的新手并试图想出一种在控制器中调用以下服务的方法。该服务定义如下。
app.factory('myappFactory', ['$http', function($http) {
var data = {};
data.getmyServiceData = function() {
return $http.get('http://..')
}
return data;
}]);
此服务已在一个角度控制器上调用。我想在不同的控制器中调用它,但不想调用实际服务,而是使用从前一个调用接收的数据。如何更改它以便我可以在不同的控制器中调用工厂?
答案 0 :(得分:0)
您可以在服务中使用承诺:
app.factory('appFactory',function($http,$q) {
var data_q = $q.defer();
var service = {
getData: getData
}
$http.get('http').then(function(response) {
data_q.resolve(response.data);
})
return service;
function getData() {
return data_q.promise;
}
});
在你的控制器中:
app.controller('AppCtrl',function($scope,appFactory) {
appFactory.getData().then(function(data) {
$scope.data = data;
})
})
答案 1 :(得分:0)
您只需将其包含在控制器的依赖项中:
app.controller('MyController', ['$scope', 'myappfactory',
function($scope, myappfactory) {
myappfactory.getmyServiceData().then(function (data) {
$scope.data = data.data;
});
}]);
为了进行一些改进,您可能会考虑让工厂返回一个在返回数据之前解包数据的函数:
app.factory('myappFactory', ['$http', function($http) {
return function() {
return $http.get('http://..', { cache: true }).then(function (data) {
return data.data;
};
};
}]);
然后你可以像这样使用它:
app.controller('MyController', ['$scope', 'myappfactory',
function($scope, myappfactory) {
myappfactory().then(function (data) {
$scope.data = data.data;
});
}]);