-1

2 개의 컨트롤러 인 loginCtrl과 regCtrl이 있습니다. 로그인 컨트롤러 $ scope.login 내에 함수가 있고이 함수를 내 regCtrl 내부에서 호출하려고합니다. 내가 성취하고자하는 것은 성공적인 등록 후에 로그인 할 필요없이 사용자를 그의 홈페이지로 리디렉션하는 것입니다. angularjs에있는 다른 컨트롤러의 컨트롤러에 정의 된 함수를 사용하는 방법

$scope.login=function(){ 
     NProgress.start(); 
     singInClicked = true; 
     var request =$http({ 
       withCredentials: true, 
       method:"post", 
       url: "http://localhost:1337/auth/login", 
       data: { 
        user_identifier: $scope.user_identifier, 
        password: $scope.password 
       } 
     }); 
and the code of the regCtrl where i want to call this function is 

request.success(
     function(data){ 
      $scope.response=data; 
      console.log("you have registered successfully"); 
      //serviceStatus($http); 
      //**call $scope.login here** 
      NProgress.done(); 
     }); 

loginCtrl

에서 로그인 기능은 내가 어떻게 이것을 달성합니까?

답변

0

편도 컨트롤러에 $controller 서비스를 삽입하고 $ 컨트롤러를 생성하는 동안 새 범위를 할당 한 다음 해당 범위를 사용하여 loginCtrl에서 함수를 호출하는 것이 좋습니다.


app.controller('regCtrl', ['$scope', '$controller', function($scope, $controller) { 

    var loginCtrlVM = $scope.$new(); //Create a new scope 
    //var loginCtrlVM = $scope.$new(true); //Or even an isolated scope 

    $controller('loginCtrl', {$scope:loginCtrlVM }); //Instantiate loginCtrl passing in the scope 

    request.success(function(data){ 
     ... 
     console.log("you have registered successfully"); 

     loginCtrlVM.login(); //<--- Now call login from your own scope 

     NProgress.done(); 
    }); 

}]); 
또 다른 방법은 별도의 서비스 밖으로 논리 추상적 인 수와 컨트롤러를 모두 사용, 또는 사용자가 (등록 서비스에 로그인 한 경우 확인하는 일반적인 경로 로직 것입니다 수 로그인 서비스를 호출하여 로그인 작업을 수행하여 로그인 상태를 설정하십시오). 이렇게하면 컨트롤러에 이런 종류의 의존성이 없어야합니다. 그것은 또한 하나의 컨트롤러에 NProgress.start();을 가지고 있고 다른 컨트롤러에 NProgress.done();을 가지고있는 것처럼 보입니다 (아마 전체 코드를 보지 못했을 것입니다). 스파게티로 보입니다.

+0

오류 : [$ injector : modulerr]을 (를) 통해 콘솔에 오류 메시지를 표시합니다 : [$ injector : 모듈러]로 인해 모듈 altonitoApp을 인스턴스화하지 못했습니다. 다음 이유로 인해 altonitoApp.index-controllers 모듈을 인스턴스화하지 못했습니다 : [$ injector : nomod] 'altonitoApp.index-controllers'모듈을 사용할 수 없습니다! 모듈 이름의 철자가 잘못되었거나로드하는 것을 잊었습니다. 모듈을 등록하면 종속성을 두 번째 인수로 지정하십시오. – Gaurav

+0

앱 초기화 오류입니다. 구문 오류가 있거나 이름이 잘못되었을 수 있습니다. 플 런커를 준비하십시오. 해당 컨트롤러를 사용할 수 없거나이 앱이 의존하지 않는 다른 앱에 있지 않은 경우 컨트롤러를 인스턴스화 할 때이 오류 메시지가 나타나서는 안됩니다. – PSL

+0

@Gaurav 다음은 데모 예제입니다. 콘솔과 script.js를 확인하십시오. http://plnkr.co/edit/0uKVjD?p=preview 다른 문제가 있습니다. 당신은 "..."나는 내 대답을 바로 잡았습니까? – PSL

관련 문제