간단히 말해서 Angular 4 응용 프로그램이 있습니다.이 구성 요소에는 안드로이드 영감 부동 동작 단추가 포함되어 있습니다.이 단추를 클릭하면 현재 활성 구성 요소에 대한 메서드가 실행됩니다 (기본적으로 페이지 내용). 그 차이를 만드는 경우 각도 4 라우터를 사용하고 있습니다. 어떤 구성 요소가 현재 활성화되어 있는지 항상 알 수 없기 때문에 View Child 방식에 대한 일부 우려가 제기되었습니다. 가능하다면 모든 사용자에게 #binding
특성을 추가하는 것을 피하고 싶습니다. 단일 템플릿.응용 프로그램 구성 요소의 각도 4 - 호출 하위 구성 요소 메서드
저는 ViewChild 데코레이터, ContentChild 데코레이터, 이벤트, 서비스를 통해 이것을 시도했습니다. 지금까지 절대적으로 은 아무것도 없었습니다.이 효과가 있었고 저는 막혔습니다. 이 시점에서 이것이 진정으로 복잡한 지 아니면 단지 PEBCAK인지는 확실치 않습니다.
문제의 버튼을 app.component
내에 포함되어 있습니다 - 여기에 일반적인 생각은
<div class="fab-container">
<button class="btn btn-warning btn-fab" (click)="fabAction()">
+
</button>
app.component.ts
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent {
currentUrl: string = null;
constructor(private router: Router, private currentRoute: ActivatedRoute) {}
ngOnInit() {
this.router.events.subscribe((val) => {
this.currentUrl = this.router.url;
});
}
}
app.component.html
(간결에 딱 버튼)이 버튼이 때 클릭하면 하위 구성 요소에 fabAction()
메서드가 실행됩니다.
@Component({
selector: 'app-course-list',
templateUrl: './course-list.component.html',
styleUrls: ['./course-list.component.scss']
})
export class CourseListComponent implements OnInit {
courses: Course[];
showFilter: boolean = false;
constructor(
private courseService: CourseService
) { }
ngOnInit(): void {
this.getCourses();
}
getCourses(): void {
this.courseService.getCourses().then(courses => this.courses = courses);
}
// Should execute this method when button is clicked on app component
fabAction(): void {
console.log('responding to click on parent component');
this.showFilter = !this.showFilter;
}
}
</div>
것은 아무 가치가 각 구성 요소가 다른 사람들이/숨기기 것을 보여줍니다, 그것은 팹 버튼이 응용 프로그램의 구성 요소를 클릭하면, 일부는 조동사가 열립니다 실행하기 위해 자신의 행동의이 것입니다, 일부는 그렇게 리디렉션 구성 요소 자체에서이 동작을 지정할 수있게되어 정말 기쁩니다.
이것에 대한 공식적인 각도 문서를 읽으면서 답변보다 더 많은 질문이 남았습니다. 그래서 누군가가이 문제를 해결할 더 이상적인 방법을 제안 할 수 있기를 바라며 모든 것을 깨끗한 슬레이트로 되돌려 보았습니다.
편집 - 여기
<header *ngIf="currentUrl != '/landing'">
<div class="brand">
<img src="/assets/circle-logo.png" />
</div>
<nav>
<div class="page-title">
<h2>{{ page?.title }}</h2>
<h4>{{ page?.strapline }}</h4>
</div>
<ul class="header-nav">
<li [routerLink]="['/courses']">Courses</li>
<li>Dashboard</li>
<li>Community</li>
<li>Blog</li>
<li>About</li>
</ul>
<div class="fab-container">
<button class="btn btn-warning btn-fab" (click)="fabAction()">
+
</button>
</div>
</nav>
</header>
<router-outlet></router-outlet>
<app-footer></app-footer>
요청
로app.component.html
에 대한 전체 마크 업 내가 표시 내 경로와 어떤 구성 요소를 정의 내 앱 라우팅 모듈의 4 각 영웅의 투어에서 수행으로하는 경로 (에 대한 데모)
const routes: Routes = [
{ path: '', redirectTo: 'landing', pathMatch: 'full' },
{ path: 'landing', component: LandingComponent },
{ path: 'courses', component: CourseListComponent },
{ path: 'course/:id', component: CourseComponent }
];
@NgModule({
imports: [ RouterModule.forRoot(routes) ],
exports: [ RouterModule ]
})
export class AppRoutingModule {}
어디에서 구성 요소를 만들고 있습니까? 하위 구성 요소를 포함하는 방법을 보여주는 코드를 더 게시 할 수 있습니까? –
구성 요소가 라우터 콘센트를 통해 각진 라우터에 표시되고, 원래 게시물에 'app.component.html'의 전체 마크 업을 추가하겠습니다. – DLMousey