수색…


비고

공유 서비스 사용에있어 매우 중요한 점 중 하나는 공유되어야하는 최상위 구성 요소의 providers 배열에 포함되어야한다는 것입니다.

왜 그런가요? 자, 각 Componentproviders 배열에 MyService 참조를 포함한다고 가정 해 봅시다. 같은 것 :

@Component({
  templateUrl:"page1.html",
  providers: [MyService]
})

@Component({
  templateUrl:"page2.html",
  providers: [MyService]
})

이렇게하면 각 구성 요소에 대해 서비스의 새 인스턴스가 만들어 지므로 한 페이지가 데이터를 저장할 인스턴스가 데이터를 가져 오는 데 사용 된 인스턴스와 달라집니다. 그래서 그것은 효과가 없을 것입니다.

전체 앱이 동일한 인스턴스를 사용하도록 (서비스가 싱글 톤 서비스로 작동하도록) App Component 과 같이 참조를 추가 할 수 있습니다.

@Component({
  template: '<ion-nav [root]="rootPage"></ion-nav>',
  providers: [MyService]
})

ionicBootstrap(MyApp, [MyService]); MyService 참조를 추가 할 수도 있습니다 ionicBootstrap(MyApp, [MyService]); Angular2 스타일 가이드 에 따르면

Angular 2 인젝터를 공유 할 맨 위의 부품에 서비스를 제공하십시오.

왜? Angular 2 인젝터는 계층 적입니다.

왜? 최상위 구성 요소에 서비스를 제공하면 해당 인스턴스가 공유되어 해당 최상위 구성 요소의 모든 하위 구성 요소에서 사용할 수 있습니다.

왜? 이는 서비스가 메소드 나 상태를 공유 할 때 이상적입니다.

왜? 두 개의 서로 다른 구성 요소가 서로 다른 서비스 인스턴스를 필요로 할 때 이것은 이상적이지 않습니다. 이 시나리오에서는 새 인스턴스와 별도 인스턴스가 필요한 구성 요소 수준에서 서비스를 제공하는 것이 좋습니다.

효과가있을 것입니다. 그것은 단지 최선의 방법이 아닙니다. 부트 스트랩 제공자 옵션은 라우팅 지원과 같이 사전 등록 된 Angular 자신의 서비스를 구성하고 재정의하기위한 것입니다 .

... App Component 가 최선의 선택이 될 것입니다.

다른 페이지간에 정보 공유

공유 서비스 사용의 가장 쉬운 사례 중 하나는 애플리케이션의 특정 페이지에서 일부 데이터를 저장 한 다음 다른 페이지에서 데이터를 다시 가져 오려는 경우입니다.

하나의 옵션은 매개 변수로 데이터를 전송하는 것일 수 있습니다 (예 : 한 페이지가 다른 페이지를 호출하는 경우).하지만 애플리케이션의 완전히 다른 부분에서 데이터를 사용하려면 가장 좋은 방법은 아닙니다. 그것. 공유 서비스 가 제공됩니다.

이 예제에서는 MyService 라는 간단한 서비스를 사용합니다.이 서비스는 문자열을 저장하는 saveMessage() 와 문자열을 저장하는 getMessage() 라는 두 가지 간단한 메소드 만 가지고 있습니다. 이 코드는 실제로 작동 하는 것을 볼 수있는 이 작업 플러 커의 일부입니다.

import {Injectable} from '@angular/core';

@Injectable()
export class MyService { 
  
  private message: string;
  
  constructor(){ }
  
  public saveMessage(theMessage: string): void {
    this.message = theMessage;
  }
  
  public getMessage(): string {
    return this.message;
  }
}

그런 다음 새 메시지를 저장하려면 saveMessage(theMessageWeWantToSave); 사용할 수 있습니다 saveMessage(theMessageWeWantToSave); MyService 인스턴스 (그냥 service 라고 함)의 메소드.

import { Component } from "@angular/core";
import { MyService } from 'service.ts';

@Component({
  templateUrl:"page1.html"
})
export class Page1 {
  
  message: string;
  
  // ... 
   
  public saveSecretMessage(): void {
    this.service.saveMessage(this.message);
  }      
}

같은 방법으로, 우리가 그 데이터를 얻고 싶을 때 우리는 다음과 같이 서비스 인스턴스에서 getMessage() 메소드를 사용할 수 있습니다 :

import { Component } from "@angular/core";
import { MyService } from 'service.ts';

@Component({
  templateUrl:"page2.html"
})
export class Page2 {
  
  enteredMessage: string;
  
  constructor(private service: MyService) {
    this.enteredMessage = this.service.getMessage();
  }
    
  // ...
}

MyService 서비스에 대한 참조가 포함되어야하는 이유와 그 이유에 대해서는 Remarks 섹션을 확인하십시오.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow