Angular 1.3에서 작동 할 수있는 무언가를 얻으려고 미쳐 버렸습니다 ... 가능할 수도 있지만 ... 꼭 그래야만합니다. 기본적으로, 나는 계산 된 값만을 반환하는 서비스를 작성하고 싶습니다. 약속은 아닙니다.Angular 1 service in service
$ http.get 요청을하고 약속을하는 서비스가 있습니다. 다른 서비스에서 이것을 호출하고 해당 데이터를 가져 와서 조작하고 값을 반환하고 싶습니다. 나는 일단 내 봉사를 부름 받았다. 내 추론은 전화를 걸고 실제 값을받을 수있는 공유 가능한 기능을 갖고 싶기 때문에 ng-show와 같은 조건으로 사용할 수 있습니다. 내가 말했듯이 컨트롤러에서이 함수를 작성하고 약속의 데이터를 변수에 할당 할 수는 있지만이 변수를 필요한 모든 단일 컨트롤러에 쓰고 싶지는 않습니다.
예 :
app.factory('searchService', ['$http', function($http) {
return {
performSearch: function(searchString) {
return $http.get('http://asdf.com/search/' + searchString);
},
getItemCount: function(itemName) {
var _this = this;
this.count = 0;
this.performSearch(itemName).then(
function successCallback(resp) {
_this.count = resp.data.items.length;
},
function errorCallback() {
// This section doesn't matter right now
};
return this.count;
}
};
}]);
저는 컨트롤러에서 이것을 호출하고 "5"등을 얻을 수 있기를 바랍니다. 또는 "ng-show ="blahCtrl.getItemCount ('item_search_string') == 0과 같은 ng-show에서 호출하는 것이 더 좋습니다. 다시 말하지만, 필자가 필요로하는 컨트롤러가 여러 개 있기 때문에 복제하지 않을 것입니다. 함수는 모든 곳에서 필요한 수를 추출하는 데에만 사용됩니다.
이것은 나를 위해 작동하지 않습니다 ... 내 반환 값은 항상 내가 처음에 this.count를 설정 한 것입니다. 콘솔을 삽입했습니다. .log 몇 군데, this.count가 콜백 함수가 값을 설정할 수 있기 전에 반환 된 것 같습니다. 내가 무엇을 하든지,이 서비스에서 하나의 값을 반환 할 수는 없으며 나를 운전하고 있습니다. 더 이상 혼란스러워하는 이유는 내가 컨트롤러 내부에서이 코드를 작성하면된다 :
var _this = this;
searchService.performSearch('asdf').then(
function(data) { _this.searchResults.data; }
);
잘 작동하고 searchResults 변수 내에서 내 약속 데이터를 바로 얻을 수 있습니다. 어떤 이유로 든 서비스 내부에서 그런 식으로 작동하지 않습니다.
희망적으로 이것은 의미가 있습니다. 나는 조금 어슬렁 거리거나 불분명했을 것입니다. 어떤 도움을 주시면 감사하겠습니다 ... 나는 가능한 한 많은 시간을 연구하고 시행 착오를 사용하고 있습니다.
감사합니다.
이 걸릴 각
ng-if
에 대한 요청을 만들기 위해 나쁜 너의 소원에 아주 가까운 Restangular의 $ 객체 사용법을 봐라 ... –은 당신의 요구에서 나온 것처럼 보이기 때문에 performSearch는 개인적인 기능이 될 것이다. 그래서 왜 retu 일까? 그거야. 대신 {getItemCount : function() {....}}을 반환하십시오. return {} 바로 전에 performSearch() {} 함수를 작성하십시오. 이 방법으로 정의하고 반환하지 않을 때이 함수는 비공개 함수입니다. performSearch 호출을 원한다면 사용해야합니다.그런 다음 의미 론적으로 만 의미가 있습니다 - "performSearch를 호출하고 결과에 따라 다음을 호출하십시오 - DO - 뭔가. 코드 품질과 구문이 원하는 것 사이에 갇혀있는 것처럼 보입니다 – Mahesh