2017-09-24 4 views
2

routerLink을 방문 할 때마다 ngOnInIt 메서드를 호출해야합니다. 현재 방문한 링크의 ID를 사용하여 데이터베이스에서 데이터를 바인딩하고 검색하므로 메서드가 호출되지 않은 경우입니다. 나는 그 자료를 잃어 버렸다. 여기 라우터 링크를 방문했을 때 구성 요소 다시로드

내 init 메소드의 예입니다

ngOnInit() { 
    this.authService.getAuth().subscribe(auth=> { 
     if(auth) { 
      this.loggedInUser = auth.email; 
     } else { 
     } 
    }); 

    this.teamService.getTeams().subscribe(teams => { 
     this.teams = teams; 
     console.log(this.teams); 
     for(var i = 0; i < this.teams.length; i++) { 
      if(this.teams[i].createdBy == this.loggedInUser) { 
       this.myTeams.push(this.teams[i]); 
      } 
     }  
    }); 

    console.log(this.myTeams); 

    this.id = this.route.snapshot.params['id']; 

    //Get Team 
    this.scrimService.getScrim(this.id).subscribe(scrim => { 
     this.scrim = scrim; 
    }); 

} 

을 (죄송합니다 여기에 코드 조각을 사용하는 방법을 알고하지 않습니다) 그리고 여기이 구성 요소

에 도착하기 위해 사용하고있는 라우터 링크입니다
<a *ngIf="recordOwner" [routerLink]="['/edit-scrim/'+id]" class="btn btn secondary">Edit</a> 

나는 ngOnInit 방법에서 모든 것이 생성자에서 호출되도록 내가 생성자 내부의 데이터에 activatedRoute.paramssubscribe을 사용할 수 있습니다 내 같은 비슷한 질문에 어떤 답을 읽을 수 있지만 나는 무엇을 그 수단과 방법에 대한 단서가 없다 교류 내 시나리오에서 complish :/

편집

id: string; 
loggedInUser: string; 

scrim: Scrim = { 
name: '', 
game: '', 
time: '', 
level: '', 
description: '', 
region: '', 
platform: '', 
acceptedBy: '', 
acceptedDate: '', 
acceptedStatus: '', 
createdBy: '', 
createdDate: '', 
team: '' 

} 

teams: Team[]; 
myTeams: Team[] = []; 
currentDate: string; 
currentTime: string; 

나는 중포 기지 데이터베이스에서 "팀"얻고 모델의 배열을 반환하는 서비스가있다. 현재 로그인 한 사용자의 이메일 주소를 사용하여 현재 사용자 만 만든 팀을 찾습니다. 일단 배열 myTeams 안에 그 팀을 가지고 내가 선택한 다음 사용자가 선택할 myTeams 목록에서 팀 이름으로 선택 HTML 태그를 채우려고합니다. 처음으로이 편집 - 스크림 페이지에 도착하면 select 태그의 팀이 잘 채워집니다.하지만 다른 페이지로 이동하여이 편집 - 스크림 페이지로 돌아 가면 RouterLink를 사용하여 선택 목록에 채워지지 않습니다. ngoninit 메소드를 다시 호출하십시오. 따라서 웹 페이지를 새로 고치면 ngoninit가 다시 호출되기 때문에 팀이 다시 채워집니다. 당신은이 같은 생성자로 activatedRoute를 주입 할 필요가

답변

0

,

constructor(private activatedRoute: ActivatedRoute) { 
this.activatedRoute.params.subscribe(
params =>{ 
    this.id = params['id']; 
    this.scrimService.getScrim(this.id).subscribe(scrim => { 
     this.scrim = scrim; 
    }); 

} 
} 
+0

하지만 다시 init 메소드를 호출하거나하지 않는 구성 요소를 다시로드 :/ –

+0

당신은 다른 방법으로 API를 호출하는 코드를 추가해야하고 그 메소드를 호출하면 'this.id = parmas ['id '];' –

+0

API 호출을 포함하도록 내 대답이 업데이트되었습니다. 작동하는지 확인하십시오. 가능한 경우 –

관련 문제