2016-07-15 2 views
5

서비스 기능에 매개 변수를 보낼 수 있습니다.약속이있는 AngularJS에서 함수에 매개 변수를 전달하는 방법

getQuestions : 함수 (stateCode)

stateCode가 dtoResource.rc1Step1DTO()의 응답으로부터 $ 범위에서 설정 questionResource.js으로 상태 코드를 전달하는 방법

angular 
    .module('autoQuote') 
    //Do initalization on page load 
    .run(['$log', '$rootScope', '$state', 'dtoResource', 'questionResource', function($log, $rootScope, $state, dtoResource, questionResource) { 
     $log.info('Post DTO on page load.'); 
     dtoResource.rc1Step1DTO() 
      .then(questionResource.getQuestions) 
      .then(function(questions) { 
       $rootScope.questions = questions; 
       console.log('Obtained questions. Assigned to rootscope'); 
      }) 
      .then(function() { 
       console.log('This should be printed after the above methods are done  executing'); 
       console.log($rootScope); 
      }); 

    }]) 

다른 기능. 범위에서의 위치가

$scope.postAutoQuoteObj.SessionInfo.StateCode 

아래는 http://plnkr.co/edit/Op1QDwUBECAosPUC7r3N?p=preview

+0

귀하의'실행()'기능은 컨트롤러도 존재하기 전에 실행하고 얘기하고있는'$의 scope'는'실행() '함수 내에서 액세스 할 수 없습니다. 나는 당신이 먼저 물류를 해결할 필요가 있다고 생각합니다. – JLRishe

+0

함수 .run에 썼습니다. dom로드 후 실행하고 싶습니다만,이 메서드는 독립해 동기 순서가 필요합니다. 내가해야 할 변화를 제안 해 주시겠습니까? 매개 변수 전달 문제를 해결하기 전에 –

답변

0

코드 에 대한 plunker 당신의 모듈 autoQuote.run()는 응용 프로그램을로드하는 동안 한 번 호출됩니다. 따라서 다시 실행 해 볼 것을 기대하지 마십시오.

당신이 옳은 대답에 가깝습니다. 당신은 단지 약간의 조직 개편을 할 필요가 있습니다. 내가 제안 할 팁은 나중에 지시자를 만드는 것에 대해 걱정하는 것입니다. 먼저 컨트롤러를 얻고 루트가 먼저 작동하도록하십시오. 훌륭한 프레임 워크를 만들었습니다. 당신은 ui-router를 사용하고 있습니다. 이것은 상태가 요청 될 때 ui-router에게 실행할 컨트롤러를 알릴 수 있음을 의미합니다. 따라서 응용 프로그램의 수명주기는 다음과 같습니다.

module.run // 여기서 처음으로 코드를 입력하십시오. 최초로드시에만 module.config // 귀하의 상태를 생성하는 app.config //.

다음 URL에 따라보고있는 상태에 따라 다릅니다. 해당 상태 (또는보기)에 대한 컨트롤러가 실행됩니다

그래서 /에 대한 다른 상태 구성을 추가하면 해당 상태를 autoQuoteCtrl에 바인딩 할 수 있습니다.

또한 입력 요소에 ng-model 및 value를 사용하려고 시도하는 등 다른 여러 가지 문제가 있습니다. 이것은 정확하지 않습니다.

사용자는 ui-views를 구현하지 않습니다. 이것은 당신의 컨트롤러가 결코 실행되지 않을 것이라는 것을 의미합니다. 기술적으로, 당신의 경우 autoQuoteCtrl은 실행될 것입니다.하지만 당신이 ng-controller를 사용하여 페이지에 강제로 넣었을 때만 가능합니다. 이것은 ui-router가 피하도록 설계된 것입니다.

내가 생각하기에 .run()에 코드를 놓은 이유가 여기에 있습니다. 이것은 응용 프로그램이 페이지로드시 코드를 "실행"하는 것을 발견 한 유일한 장소입니다.이 위치는 false입니다. 앱이로드 되었기 때문에 실행 중이 었습니다. 내가 여분의 경우 미안 해요. 하지만 중요한 포인트입니다.

또한 리소스에 statecode를 전달하여 json 데이터에 액세스하려고합니다. 그것은 $ 리소스가 작동하는 방식이 아닙니다. 리소스의 이름을 전달하면 해당 리소스에서 모든 것을 반환합니다. 약속이 반환 된 후 코드를 필터링합니다. 당신은 오직 하나의 자원만을 가지고 있습니다. 즉 "CA.json"이므로 리소스 서비스에서 단 하나의 줄만 가져와 하나의 리소스 서비스 만 있으면됩니다. JSON에서 정확한 데이터를 걸러 낼 수있는 추가 비 - 리소스 서비스가 필요합니다. 일반적으로 이것은 앱이 다른 리소스를 호출하여 각 단일 리소스가 단일 모델이 아닌 필요한 모델을 반환하도록하는 이유입니다.

당신이 결코 이제까지 이제까지 당신이 DOM과 상호 작용하지 않도록 당신이 각 사용하는 document.getElementById()를 사용한다 직접

마지막으로, 여기에 올바른 방향으로 여러분을 안내 할 수 있도록 더 많은 수정 plunkr입니다.

http://plnkr.co/edit/dUJm01uu7RnhltC2pLLb?p=preview

관련 문제