我正在尝试将数据从我的http服务发送到我的控制器。该服务正确获取数据,但不会将其发送到控制器。
现在,我知道查询是异步完成的,这就是我尝试使用$ q.defer的原因。 我尝试按照类似问题提供的示例:AngularJS $http call in a Service, return resolved data, not promises,但它仍然不起作用。
这是我的服务:
.service("builds", ['$http', '$q', function($http, $q) {
var deferred = $q.defer();
$http({
method:'GET',
url: '/builds',
cache : true
}).success(function(data) {
deferred.resolve(data);
}).error(function(msg){
deferred.reject(msg);
});
console.log(deferred.promise);
return deferred.promise;}]);
这是我的routeProvider
$routeProvider.
when('/builds', {
controller: ['$scope', 'buildsData', function ($scope, buildsData) {
console.log("In routeprovider:" + buildsData);
$scope.allBuilds = buildsData;
}],
template: '<build-list></build-list>',
resolve: {
buildsData: ['builds', function(builds){
return builds;
}]
}
})
最后这是我的控制器片段:
var app = angular.
module('buildList').
component('buildList', {
templateUrl: 'build-list/build-list.template.html',
controller: function BuildListController($scope, $window,$location,$cookies, builds) {
console.log($scope.allBuilds);
$scope.league = $scope.allBuilds;
答案 0 :(得分:2)
正如@vishal所说
你应该在服务中创建一个方法,因为一般来说服务可能有很多get和set方法(我的意思是最佳实践)。
创建一个函数说getData
#!/bin/bash
f1done="false"
f2done="false"
function f1 {
echo "f1: "
sleep 4
echo "f1 done."
f1done="true"
}
function f2 {
echo "f2: "
sleep 2
echo "f2 done."
f2done="true"
}
f1 &
f2 &
until [[ "$f1done" == "true" && "$f2done" == "true" ]]; do
echo "$f1done $f2done...";
sleep 3;
done
echo "Both done."
然后你应该在控制器中调用这个方法
在控制器中,您应该注入此服务,然后
function getData()
{
$http({
method:'GET',
url: '/builds',
cache : true
})
}
答案 1 :(得分:0)
你不应该
controller: ['$scope', 'buildsData', function ($scope, buildsData) {
console.log("In routeprovider:" + buildsData);
$scope.allBuilds = buildsData;
}],
和另一个文件中的控制器:
你可以直接做
when('/builds', {
controller: 'BuildListController'
template: '<build-list></build-list>',
resolve: {
buildsData: ['builds', function(builds){
return builds;
}]
}
})
然后在你的控制器中
$scope.allBuilds = buildsData;
此外,如果你想为它添加一些功能,你的服务应该看起来像这样:
.service("builds", ['$http', '$q', function($http, $q) {
var deferred = $q.defer();
getbuilds: function(){
$http({
method:'GET',
url: '/builds',
cache : true
}).success(function(data) {
deferred.resolve(data);
}).error(function(msg){
deferred.reject(msg);
});
console.log(deferred.promise);
return deferred.promise;}]);
}