다른 구성 요소를 통해 속성을 업데이트 한 후 구성 요소가 Angular 2에서 렌더링되도록 트리거하는 방법은 무엇입니까? ngZone.run ()이 작동하지 않습니다.

LozzaDude

다시 렌더링 할 구성 요소를 가져 오는 데 문제가 있습니다. 다른 구성 요소가 메서드를 호출하여 업데이트 할 수 있도록하는 이동 경로 구성 요소가 있습니다. 예를 들어 ViewContact 구성 요소가 있다고 가정하면 해당 구성 요소가 이동 경로의 활성 페이지를 연락처 이름으로 설정하기를 바랍니다.

이동 경로 구성 요소가 ViewContact 구성 요소에 삽입되고 있으며 이동 경로에 대한 공급자를 설정했습니다. ViewContact 구성 요소는 탐색 경로 구성 요소에 대한 메서드를 호출하고 있으며 차례로 호출 ngZone.run()하여 구성 요소를 다시 렌더링하도록 트리거해야합니다. 그러나 그렇지 않습니다.

여기에 간단한 Plunker를 만들었습니다 : http://plnkr.co/edit/rWZ8ZGqmda1cieDmsc2s

내가하려는 것은 주사를 사용하여 달성 할 수 있습니까? 아니면 더 나은 방법이 있습니까?

감사....

티에리 기사단

귀하의 경우 에는 부모 / 자식 관계가 없기 때문에 Breadcrumb구성 요소를 OtherComponent하나에 주입 할 수 없습니다 . 공급자에 첫 번째 구성 요소를 추가해도 작동하지 않습니다.

providers: [Breadcrumb],

Günter에서 제공하는 접근 방식을 선택하거나 공유 서비스를 선택합니다.

import {Subject} from 'rxjs/Rx';

export class SharedService {
  property:string;
  property$:Subject<string> = new Subject();

  setProperty(newValue:string) {
    this.property = newValue;
    this.property$.next(this.property);
  }
}

구성 요소에서이 서비스를 다음과 같이 사용합니다.

export class OtherComponent implements OnInit {
  count: number = 1;

  constructor( private service: SharedService) {
  }

  ngOnInit() {
    this.updateBreadcrumb();
  }

  updateBreadcrumb() {
    this.service.setProperty("changed " + (this.count++));
  }
}

(...)

export class Breadcrumb {
  @Input() testProperty: string = "Initial Value which hopefully will get changed";  

  constructor(private service:SharedService) {
    this.service.property$.subscribe((data) => {
      this.testProperty = data;
    });
  }
}

이 plunkr를 참조하십시오 : http://plnkr.co/edit/wPEnpTWeMM1qpQPyzpdc?p=preview .

구성 요소 상호 작용에 관한이 문서가 관심을 가질 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관