2016-02-05 44 views
0

我通過一個工廠,看起來像這樣調用從我的API我的數據:

app.factory('Service', ['$http', function ($http) { 

var urlBase = 'http://localhost:50476/api'; 
var Service = {}; 

Service.getComp = function() { 
    return $http.get(urlBase + '/complaints') 

}; 

return Service; 
}]); 

然後我用我的控制器使用的指令:

getComp(); 
$scope.comp = []; 

function getComp() { 
    var deferred = $q.defer(); 

    Service.getComp() 
    .success(function (comp) { 
     console.log('comp', comp); //returns array data 
     $scope.comp = comp.data; 
     deferred.resolve(comp); 
    }) 
    .error(function (error) { 
     $scope.error = 'error' + error.message; 
    }); 

    return deferred.promise; 
} 

$scope.index = 0; 
$scope.complaints = $scope.comp[0]; 
console.log($scope.complaints); //undefined 
console.log($scope.comp); //array of 0 

當我嘗試訪問函數之外的項目時,它是未定義的。我試圖尋找使用$ q的解決方案,但它仍然不顯示數據。當我添加延期部分時,我的ng-repeat也停止工作。

+0

在您登錄$ scope.complaints時它是未定義的,因爲$ http請求的響應尚未返回,所以您的'成功'方法尚未執行。 – o4ohel

回答

1

試試這個:

getComp(); 
$scope.comp = []; 

function getComp() { 
    return Service.getComp() 
    .success(function (comp) { 
     $scope.comp = comp.data; 
     $scope.complaints = $scope.comp[0]; 
    }) 
    .error(function (error) { 
     $scope.error = 'error' + error.message; 
    }); 
} 

的值是不確定的,當你做你的日誌,因爲這些線路上運行您的請求來自服務器回來。這就是爲什麼設置$scope.complaints必須進入success回調。

在你主 -

如果你想確保 complaints
+0

萬謝謝。我一直試圖弄清楚這幾天。 – EPV

0

你開始你的邏輯,你可以使用UI的路由器resolve keyword(標準包我假設你正在使用的用戶界面,路由器離子)之前加載某些國家在您的控制器的.js

$stateProvider.state('yourState', { 
    resolve: { 
    complaints: function(Service) { 
     return Service.getComp(); 
    } 
    } 
}); 

你可以再注入complaints

.controller('myController', function(complaints) { 
    $scope.complaints = complaints; 
}) 

resolve at $ stateProvider會阻止並等待承諾解決...