서비스를 사용하는 컨트롤러에서 볼 수있는 하나의 함수가있는 각도 서비스가 있습니다. 즉. getDataAngularJS 서비스에서 개인용 헬퍼 함수 정의
내 서비스가 서비스에 반환하기 전에 데이터를 조작하는 서비스에서 modifyData라는 헬퍼 함수를 사용하여 데이터를 컨트롤러에 전송할 수있게하려고합니다. 서비스 외부에서 도우미 기능을 사용하거나 서비스 외부에서 도우미 기능을 사용하고 싶지 않습니다.
내 오류는 각도입니다. 오류 : modifyData는 정의되지 않았습니다.
내가 뭘 잘못하고 있니?
편집 : 예제 코드가 작동해야하므로 실제 코드는 다음과 같습니다. 너무 단순화했을 수 있습니다.
rabApp.service("reviewService",
["$http", "$q", "beerService", "userService",
function($http, $q, beerService, userService) {
/* HELPER FUNCTIONS */
/* Builds a complete review object from a user object, beer object, and partial review object */
var buildReviewObj = function(reviewObj, switchClass) {
var deferred = $q.defer();
if(switchClass) {
reviewObj.dirClass = "left";
} else {
reviewObj.dirClass = "right";
}
//Make sure the review picture is valid and if not use default one
if(reviewObj.image.length <= 0) {
reviewObj.image = "images/default-beer-pic.jpg";
}
//Make sure the review style is present if not put a default in
if(reviewObj.style.length <= 0) {
reviewObj.style = "Unknown";
}
//Add user data
userService.getUser(reviewObj.author_id).success(function(data, status) {
//Check if we have a matched user
if(data.status === "success") {
var userObj = data.data;
//Make sure the profile picture is valid and if not use default one
if(userObj.profile_pic.length <= 0) {
userObj.profile_pic = "images/default-profile-pic.jpg";
}
reviewObj.author = userObj;
} else {
deferred.reject("Bad User object returned");
}
});
//Add beer data
beerService.getBeer(reviewObj.beer_id).success(function(data, status) {
//Check if we have a matched beer
if(data.status === "success") {
var beerObj = data.data;
reviewObj.beer = beerObj;
} else {
deferred.reject("Bad Beer object returned");
}
});
deferred.resolve(reviewObj);
}
/* Gets an array of review objects from the backend
* @return Array of Review objects
*/
this.getReviews = function() {
var deferred = $q.defer();
$http({
method: "GET",
url: "/includes/services/reviews.php",
params: { a : "getReviews",
limit : "10" }
}).success(function(data, status) {
//switchClass variable alternates the review to display left or right
var switchClass = true;
//Notify review controller that we are loading reviews
deferred.notify("loading");
//Check if we have reviews
if(data.status === "success") {
var reviews = [];
//Add beer and user data to each review
data.data.forEach(function(reviewObj, index) {
buildReviewObj(reviewObj, switchClass).then(function(data) {
switchClass = !switchClass;
reviews.push(reviewObj);
});
});
//Notify review controller that we are done
deferred.notify("finished");
//Review array built successfully return reviews
deferred.resolve(reviews);
} else {
//Couldn't get reviews return false
deferred.reject("Couldn't access reviews.php back end service");
}
}).error(function() {
//Couldn't get reviews return false
deferred.reject("Couldn't access reviews.php back end service");
});
return deferred.promise;
}}]);
정상적으로 작동합니다. 데모에서 복제 할 수 있습니까 – PSL
예제 코드를 단순화 할 때 오류가 수정되었을 수 있으므로 실제 코드를 추가했습니다. –
buildReviewObj의 실제 반환 값에는 설정이 100 % 올바르게 설정되지 않아서 문제가있을 수 있습니다. 그러나 실행할 함수를 얻을 수 있다면이를 수정할 수 있습니다. –