2017-10-10 14 views
-1

an earlier question I posted에 대한 후속 질문입니다.상수를 각도 2+에 저장하는 방법은 무엇입니까?

내 질문에 대한 이상한 로그 출력에 대해 서비스에서 메서드를 호출 할 때가있었습니다. console.log 출력에서 ​​서비스가 명확하게 정의한 데이터가 인쇄되지 않았습니다. 서비스 메소드를 호출 할 때 사용되는 컨텍스트는 호출하는 구성 요소의 컨텍스트라는 것이 밝혀졌습니다.

내 질문은입니다. 각도 2 이상의 여러 구성 요소에 변수를 저장하는 적절한 방법은 무엇입니까?

예를 들어, 변수를 유지하고 싶다고 말하면 isLoggedIn입니다. 이 변수는 어디에 보관합니까? 구성 요소가 해당 서비스를 호출 할 때 (즉, authService.getLoggedInStatus()) 서비스의 isLoggedIn 값을 neceesarily 가져 오지 않고 구성 요소의 동일한 이름의 변수를 잠재적으로 가져 오기 때문에 서비스에 유지할 수 없습니다.

어떻게 공유 변수를 각도로 추적합니까?

+2

왜 "authService.getLoggedInStatus는()"구성 요소에 같은 이름의 변수의 값을 줄 것이다? 이것은 유효한 방법입니다. @ 주사는 싱글 톤이며 값 저장에 좋습니다. – omeralper

+0

필자 개인적으로,이 로그인은 모든 로그인에 필요한'components'에 의해 호출되는'Service'에'BehaviourSubject'를 사용하여 로그인 한 사용자 데이터를 저장하는 프로젝트에서 사용되었습니다. 그리고 그것은 완벽하게 잘 작동합니다. 또한 모든 것이 하나의 서비스에 '가입'되면 변경 될 때 모든 구성 요소가 변경 사항을 알 수 있다는 장점이 있습니다. I.E 로그 아웃은 모든 구독자에 의해 자동으로 등록됩니다. –

답변

0

@ 피할 수없는 서비스는 싱글 톤입니다. 구성 요소가 선언 된 관련 모듈에서이 서비스를 제공합니다. 주제 구성 요소에이 서비스의 종속성 주입을 통해 공개 속성에 액세스 할 수 있습니다. 따라서 이러한 속성과 해당 값을 공유 할 수 있습니다.

0

응용 프로그램에서 전역 변수 isLoggedIn을 계속 액세스하려면 @Injectable servicesingleton 서비스를 배치하는 것이 유효합니다.

@Component({ 
    selector: 'app-home', 
    templateUrl: './home.component.html', 
    styleUrls: ['./home.component.scss'], 
    providers: [SingletonService] 
}) 

당신은 새로운 서비스 인스턴스를 초기화 :하기 위해서는 반드시 당신도 그렇게를 통해 구성 요소를 추가하는 경우에만 app.modules 예를 들어

import { BrowserModule } from '@angular/platform-browser'; 
import { NgModule } from '@angular/core'; 
import { SingletonService } from './Singleton.service'; 

@NgModule({ 
declarations: [ 
    AppComponent, 
], 
imports: [ 
    BrowserModule, 
    FormsModule 
], 
providers: [SingletonService], 
bootstrap: [AppComponent] 
}) 
export class AppModule { } 

에 선언해야 싱글 서비스입니다 , 귀하가 의도 한 세계 isLoggedIn은이 구성 요소에 자체 인스턴스가 있습니다.

희망이 있으시면 @Injectable()을 각도로 사용하여 전역 변수를 저장하는 방법에 대해 설명해주십시오. 의존성 삽입 (Dependency Injection)에

더 많은 정보 here.