2016-09-05 7 views
0

나는 HomeController를 LoginController 아래에서 호출하려고합니다. 아래 두 컨트롤러의 코드입니다 :각도 컨트롤러에서 하나의 컨트롤러를 호출

//Login controller 
    app.controller('LoginController', function ($scope, $cookieStore) { 
     $cookieStore.put('email','[email protected]'); 
     // need to call Homecontroller here 
    }); 

// Home controller 
app.controller('HomeController', function ($scope, $cookieStore, $location) { 


     if ($cookieStore.get('email') != null) { 
      $scope.wecomeMessage = $cookieStore.get('email'); 
     } 
     else 
     { 
      $scope.wecomeMessage = ""; 
     } 
    }); 

답변

0

나는 각도의 컨트롤러의 책임을 오해 한 것 같아요.

는 각 워드 프로세서에서 컨트롤러를 사용하는 방법 :

사용 컨트롤러로 :

  • 는 $ 범위 객체의 초기 상태를 설정합니다.

  • $ scope 개체에 비헤이비어를 추가합니다. DOM을 조작

    • - 컨트롤러는 비즈니스 로직을 포함해야한다 :

    는에 컨트롤러를 사용하지 마십시오.

  • 프리젠 테이션 로직을 컨트롤러에 넣으면 테스트 가능성이 크게 영향을받습니다 ( ).
  • Angular는 대부분의 경우 데이터 바인딩을 사용하고 수동 DOM 조작을 캡슐화하는 지시문을 사용합니다.
  • 형식 입력 - 대신 양식 컨트롤 을 사용하십시오.
  • 필터 출력 - 각도 필터를 대신 사용하십시오.
  • 컨트롤러에서 공유 코드 또는 상태 - 대신 각도 서비스를 사용하십시오.
  • 다른 구성 요소의 수명주기를 관리하십시오 (예 : 서비스 인스턴스를 작성). 당신은 재사용 가능한 코드의 일부 블록을 만들려면

그래서, 당신은 단지 필요한 로직 기능을 포함 각도 서비스를 만들어야합니다. 그런 다음 두 컨트롤러에 모두 삽입하면 필요한 기능을 갖게됩니다.

예 :

app.controller('LoginController', function ($scope, $cookieStore, helperService) { 
    $cookieStore.put('email', '[email protected]'); 

    $scope.wecomeMessage = helperService.getMessage(); 

}); 

// Home controller 
app.controller('HomeController', function ($scope, $cookieStore, $location, helperService) { 

    $scope.wecomeMessage = helperService.getMessage(); 
}); 


app.service('helperService', function ($cookieStore) { 

    this.getMessage = function() { 
     return $cookieStore.get('email') != null ? $cookieStore.get('email') : ""; 
    }; 

}); 
+0

확인 감사하지만, 위의 프로그램에서 나는'$ cookieStore.get ('이메일')에 기지 만'$ scope.wecomeMessage을'업데이트해야'와 그것의 어떤 서비스에 의존하지 않습니다. 문제는 환영 메시지'$ scope.wecomeMessage '를 업데이트하는 것입니다. –

+0

두 컨트롤러에서'$ scope.welcomeMessage'를 업데이트하려는 것이'$ cookieStore.get ('email ')의 내부에 의존하는지, 그렇습니까? – Mikki

+0

예 올바른 .... 그리고 위의 코드를 따르지만 문제는 두 컨트롤러가 다른 페이지 (첫 번째는 Login.html이고 두 번째는 헤더 Layout.html의 부분 레이아웃 임)입니다 .. 로그인 후 wecome 메시지를 업데이트하지만 표시되지 않고 페이지를 새로 고침하면 표시됩니다. –