내 $ routeProvider에는 컨트롤러를 인스턴스화하기 전에 API에서 데이터를 가져 오는 resolve 속성이 있습니다. $ http 서비스와 함께 $ q를 사용하면 컨트롤러에 데이터를 전달할 수 있습니다. 둘 다 똑같은 일을하지 않습니까? 컨트롤러에 데이터를 전달하는
AccountService.js
app.factory('AccountService', ['$http', '$q', function ($http, $q) {
return {
GetAccounts: function() {
return $http.get('api/Account/GetAccounts')
.then(function success(response) {
return response;
}, function error(response) {
̶r̶e̶t̶u̶r̶n̶ throw console.log("Oops!");
});
},
};
}]);
: 데이터가 컨트롤러로 전달받을 수 없었던 경우 여기
내 원래의 접근 방식 GetAccounts를 다음으로 변경합니다.app.factory('AccountService', ['$http', '$q', function ($http, $q) {
return {
GetAccounts: function() {
var deferred = $q.defer();
$http.get('api/Account/GetAccounts')
.then(function (data) {
deferred.resolve(data.data);
})
.catch(function (response) {
deferred.reject(response);
})
return deferred.promise;
},
};
}]);
route.js
app.config(['$routeProvider', function ($routeProvider) {
$routeProvider.when('/users', {
template: '<admin accounts="$resolve.accounts"></admin>',
resolve: {
accounts: function (AccountService) {
return AccountService.GetAccounts()
.then(function (data) {
return data;
})
}
}
})
}]);
첫 번째 예는'response'를 반환하고, 두 번째 예는'response.data'를 반환합니다 (이름을 'data.data'로 변경 했음). – Claies
@Claies가 그것을 얻었습니다. 감사합니다. 이제 그들은 둘 다 작동합니다 –
[$ http 서비스] (https://docs.angularjs.org/api/ng/service/$http)가 이미 $ a를 반환하므로'$ q.defer'로 약속을 할 필요가 없습니다. 약속. [This is a "Deferred Antipattern"입니까?] (http://stackoverflow.com/questions/30750207/is-this-a-deferred-antipattern)를 참조하십시오. – georgeawg