我有一个智能组件,它调用一个从api检索所有信息的服务,并加载一组显示所有信息的哑组件。
当初始化时,智能组件从url中获取id,并将其发送给服务,以从api中获取所有数据,并且一切都按照预期工作,但是当我单击页面上的链接之一,该链接应该加载相同的页面但不同的id,url改变了,但不改变视图,并且我在控制台上也没有看到任何activity。
这是智能组件:
export class MovieDetailsPageComponent implements OnInit {
movieId: string;
movie: any;
credits: any;
reviews: any;
recommendations: any;
constructor(private route: ActivatedRoute, private api: ApiService) {}
async ngOnInit() {
// this.route.params.subscribe((params: Params) => (this.movieId = params.id));
this.movieId = this.route.snapshot.paramMap.get('id');
this.movie = await this.getMovieDetails(this.movieId);
this.credits = await this.getMovieCredits(this.movieId);
this.reviews = await this.getMovieReviews(this.movieId);
this.recommendations = await this.getMovieRecommendations(this.movieId);
}
async getMovieDetails(movieId) {
return await this.api.getMovieDetails(movieId);
}
async getMovieCredits(movieId) {
return await this.api.getMovieCredits(movieId);
}
async getMovieReviews(movieId) {
return await this.api.getMovieReviews(movieId);
}
async getMovieRecommendations(movieId) {
return await this.api.getMovieRecommendations(movieId);
}
}
这是显示链接的哑组件:
export class RecommendationsComponent implements OnInit {
@Input() recommendations: any;
constructor() {}
ngOnInit(): void {}
}
<div class="content">
<h4 class="h4">
You may like
</h4>
<app-posters [movies]='recommendations.results'></app-posters>
</div>
这是从“第一个”哑组件加载的“第二个”哑组件:
<div>
<a routerLink="/movie/{{ movie?.id }}">
<img
class="img-fluid rounded"
src="{{ movie?.backdrop_path | apiImages }}"
/>
<p>{{ movie?.original_title }}</p>
</a>
</div>
实际上,有更多的哑组件从智能组件,直到实际呈现链接的一个,不确定这是否会影响到主页,我已经让它工作良好到目前为止。
编辑:
这是我的路由模块:
const routes: Routes = [
{ path: 'home', component: UpcomingPageComponent },
{ path: '', redirectTo: 'home', pathMatch: 'full' },
{ path: 'movie/:id', component: MovieDetailsPageComponent }
];
我想我已经想出了如何解决,但如果有人知道更好的替代方案可以分享它,我会很感激。
在onInit函数上,当加载智能组件时,我订阅了URL的id,并包含了订阅中的所有函数(请原谅我的技术水平不高的解释):
async ngOnInit() {
console.log('vuelta a empezar');
this.route.params.subscribe(async (params: Params) => {
this.movieId = params.id;
await this.doThings(this.movieId);
});
toDo函数(等待重构)只是将前面的所有函数包装在里面:
async doThings(movieId){
this.movie = await this.getMovieDetails(movieId);
this.credits = await this.getMovieCredits(movieId);
this.reviews = await this.getMovieReviews(movieId);
this.recommendations = await this.getMovieRecommendations(movieId);
}
如果我没有理解错的话,您希望保留在相同的组件/页面上,但根据参数中的新ID更新内容。
我最近遇到了一个类似的问题--基本上,问题是如果路由相同(即使id更改),任何东西都不会重新加载。我发现的最好的解决方案是欺骗angular首先导航到一个假url“/”,然后返回到具有新ID的当前url。下面是我如何做到的一个例子:
this.router.navigateByUrl('/', {skipLocationChange: true}).then(()=>
this.router.navigate(['/YOURURL/' + YOURID]));
问题内容: 我读过在Java中不能更改String类型的对象。但是int和char变量可以。为什么?你可以给我一个例子吗? 谢谢。(我是较新的-_-) 问题答案: 正如bzabhi所说,字符串在Java中是不可变的。这意味着字符串对象将永远不会改变。这并不意味着您不能更改字符串变量,只是不能更改字符串的基础内存表示形式。例如: 执行完这些行后,str将指向内存中的新字符串。原始的“ Hello”字
我用textview来显示温度,应该是这样的 当我更改textSize时,它显示如下所示 我只是想改变textview的大小,但我不想它变得更厚,我该如何处理这个问题呢?
如何改变材料角度到上一个旧版本,我们使用而不是? 现在我有
我正在为我的java程序使用一个JComboBox,该框的编码如下 其中猫是一个字符串数组。但是,即使我更改了所选索引,getSseltedIndex()方法仍然返回0。请帮忙。
在我的Angular 2应用程序中,当我向下滚动一个页面并点击页面底部的链接时,它会改变路径并带我进入下一个页面,但它不会滚动到页面顶部。因此,如果第一页很长,而第二页的内容很少,就会给人一种第二页缺少内容的印象。因为只有当用户滚动到页面顶部时,内容才可见。 我可以在组件的ngInit中滚动窗口到页面顶部但是,有没有更好的解决方案可以自动处理我的应用程序中的所有路线?