angularJS 서비스와 관련하여 질문이 있습니다.angularJS 서비스 - 데이터 검색을위한 약속 반환 및 데이터 관리를위한 객체?
내가 읽은 것부터 서비스를 사용하는 두 가지 방법이 있습니다.
[1] 서비스가 데이터를 반환하겠다는 약속을 반환하도록하십시오. routeProvider에서이 메서드를 사용하면 Angular가 페이지를로드하기 전에 데이터를 반환하겠다는 약속을 확인합니다.
App.factory('BooksService', function($q, $http) {
var deferred = $q.defer();
$http.get('/rest/books').then(function(data) {
deferred.resolve(data);
}, function(err) {
deferred.reject(data);
});
return deferred.promise;
};
그런 다음 내 경로 제공에 :
...
$routeProvider.when('/books', {
controller : 'BooksCtrl',
templateUrl: '/partials/books.html',
resolve: {
books: 'BooksService'
}
});
...
그런 다음 내 컨트롤러 :
App.controller('AddPaypalAccountCtrl', function($scope, BooksService) {
$scope.books = BooksService;
}
[2] 서비스가 기능 및 데이터를 포함하는 객체를 반환하게한다.
App.factory('BooksService', function($q, $http) {
var books = [];
var service = {
getBooks : function() {
return books;
},
addBook: function(book) {
books.push(book);
}
};
return service;
};
내 질문 : 그것은 두 세계의 최고를 얻을 서비스가 결의는 기능 및 데이터를 포함하는 객체를 반환 할 때 그 약속을 반환해야 할 수 있습니까?
'/ books'페이지를로드하기 전에 $ http 호출을 통해 해결할 책을 얻을 수 있지만 해당 책을 관리 할 수있는 서비스에 액세스하고 싶습니다. 물론 두 가지 서비스를 작성할 수 있지만 두 서비스를 동일하게 유지하고 두 개의 새를 죽이는 서비스를 작성하는 것이 더 효율적인지 궁금합니다.
다음은 리턴하는 공장의 예입니다 도서 검색에 대한 약속. 나는/책 페이지로 이동하기 전에 책을 검색 할 것을 요구, 다음과 같이
App.factory('BooksService', function($q, $http) {
var books = [];
var service = {
getBooks: function() {
return books;
},
addBook: function(book) {
books.push(book);
}
}
var deferred = $q.defer();
$http.get('/books').then(function(data) {
books = data.data;
deferred.resolve(service);
, function(err){
deferred.reject(err);
});
return service;
};
그런 다음, 이전에 따라, 내 경로 제공 업체는 다음과 같습니다 내 컨트롤러에
...
$routeProvider.when('/books', {
controller : 'BooksCtrl',
templateUrl: '/partials/books.html',
resolve: {
books: 'BooksService'
}
});
...
그럼, 부착합니다 그렇게 범위에 책을.
App.controller('AddPaypalAccountCtrl', function($scope, BooksService) {
$scope.books = BooksService.getBooks();
}
나는 아직 아무도 보지 못했고, 이것이 괜찮은지 궁금합니다.