Javascript 如何从各种角度控制器调用角度服务
我是angular js的新手,正在试图找到一种在controller中调用以下服务的方法。服务定义如下Javascript 如何从各种角度控制器调用角度服务,javascript,angularjs,Javascript,Angularjs,我是angular js的新手,正在试图找到一种在controller中调用以下服务的方法。服务定义如下 app.factory('myappFactory', ['$http', function($http) { var data = {}; data.getmyServiceData = function() { return $http.get('http://..') } return data; }]); 已在一个角度控制器上调用此服务。我想在不同的控
app.factory('myappFactory', ['$http', function($http) {
var data = {};
data.getmyServiceData = function() {
return $http.get('http://..')
}
return data;
}]);
已在一个角度控制器上调用此服务。我想在不同的控制器中调用它,但不想调用实际的服务,而是使用从上一次调用接收到的数据。我如何对其进行更改,以便在不同的控制器中呼叫工厂?您可以在服务中使用如下承诺:
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('MyController', ['$scope', 'myappfactory',
function($scope, myappfactory) {
myappfactory().then(function (data) {
$scope.data = data.data;
});
}]);
在控制器中:
app.controller('AppCtrl',function($scope,appFactory) {
appFactory.getData().then(function(data) {
$scope.data = data;
})
})
您只需要将其包含在控制器的依赖项中:
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.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('MyController', ['$scope', 'myappfactory',
function($scope, myappfactory) {
myappfactory().then(function (data) {
$scope.data = data.data;
});
}]);
你能帮我把它传给控制器吗?底部的返回数据如何?该服务中75%的代码是。最好让服务使用者决定何时启动请求,而不是在服务实例化时启动请求。它是如何冗余的?我们的目标是只向服务器发出一个请求,并使用来自多个控制器的数据。请阅读我链接的页面,如果您仍然认为它不是多余的,我将很乐意这样做。事实上,悬念正在折磨我。我现在回答你。这是多余的,因为整个函数体可以在五行中重写:对,但是如果您需要在另一个控制器中使用该服务,您仍然会两次访问该服务。对服务器进行两次调用。JLRishe-如果我尝试从2-3控制器调用工厂,是否会一次又一次地调用服务?@user3620975如果使用缓存,则只会调用一次服务。我已经修改了我的答案以使用cache:true选项。