2017-11-11 31 views
1

저는 AngularJS에 처음 왔으며 이것은 stackoverflow의 첫 번째 질문입니다. 이 문제에 대한 가능한 많은 답변을 읽었지만 솔루션을 찾지 못했습니다.공장에서 컨트롤러로 데이터를 반환

;(() => { 
app.factory('Users', users) 
users.inject = ['$state', 'UserServices'] 

function users($state, UserServices) { 
    users.users = []; 
..... 
    users.activeDeactive = (userId, activate) => { 
    UserServices.activeDeactive(userId, activate).then(
     response => { 
      console.log(response); //it shows "{status: 0}", which is the desired value 
      return response; 
     } 
    ) 
    } 

..... 
    return users; 
} 
})() 

을 그리고이 내 컨트롤러에서 : 내 공장이 있습니다 (I는 중요한 부분은 도트 사이에 생각) 나는 또한 얻을 수있는 방법

;(() => { 
app.controller('UsersCtrl', usersCtrl); 

function usersCtrl($scope, $state, Users, users, vendors, profiles, clients) { 
    Users.users = users; 
..... 
    $scope.activeDeactive = function(userId, activate) { 
     var response = Users.activeDeactive(userId, activate); 
     console.log(response); //it shows undefined 
    } 
..... 
    }; 
})(); 

"{상태 : 0}" 컨트롤러에? 나는 이것을 오랫동안 붙들고있다. 나는 데이터를 해결하고, 약속을 기다리는 등의 서비스를 기다리고있다. 그러나 나는이 문제가 훨씬 더 간단하다고 생각한다. 이미이 공장에 서비스 정보를 보내 왔습니다 ... 문제는 이제 공장에서 컨트롤러로 데이터를 보내는 것입니다 ... 대단히 감사합니다!

답변

0

아래의 컨트롤러 구문을 사용하십시오. 코드가 작동하지 않는 이유는 Users.activeDeactive라는 서비스를 작성 했으므로 컨트롤러에서 호출했지만 응답을 기다리지 않기 때문입니다. 응답을 기다리는 것이 매우 중요합니다. 서비스 호출이 성공하면 part를 실행합니다. 여기에서는 주어진 구문 에서처럼 응답을 잡아야합니다. 오류가 발생하면 오류 부분으로 이동합니다.

;(() => { 
    app.controller('UsersCtrl', usersCtrl); 

    function usersCtrl($scope, $state, Users, users, vendors, profiles, clients) { 
     Users.users = users; 
    ..... 
     $scope.activeDeactive = function(userId, activate) { 
      Users.activeDeactive(userId, activate).then(function(data){ 
     response = data; 
console.log(response); 
    }, 
    function(error){ 
     console.log(error); 
    }); 

    ..... 

    }; 
})(); 
+0

대단히 고마워요! 이제 이해합니다 ... "대기"응답 문제와 관련되어 있기 때문에 제목을 변경합니다. –

+0

@ SergioHernándezElvira : 쿨 :). 도움이 될만한 대답을 upvote하시기 바랍니다 :) –

+0

나는 15 점 미만의 평판을 얻었으므로 아직 할 수 없다 ... :/죄송합니다. –

0

사용자가 공장에서 반환 약속.

users.activeDeactive = (userId, activate) => { 
return UserServices.activeDeactive(userId, activate).then(
    response => { 
     console.log(response); 
     return response; 
    } 
) 
} 

으로 변경하고 컨트롤러 메소드에서 resolve 객체를 승인하도록 변경합니다.

$scope.activeDeactive = function(userId, activate) { 
    Users.activeDeactive(userId, activate).then(response =>{ 
    console.log(response); 
}); 
} 

이유는 다음과 같습니다. UserService는 사용자 팩토리에있는 것처럼 aync 메서드를 사용합니다. 그래서 컨트롤러 메소드는 사용자 팩토리 메소드를 호출 할 것이고, 이벤트 루프로 들어갈 때 userservice가 데이터를 반환 할 때까지 기다리지 않을 것입니다. 그것을 사용자 공장의 공장에서 반환 약속을 만드는 방법.

+0

감사합니다. Rakesh와 코드가 모두 작동합니다. –