我正在开展Angular项目。我正在为组件中的刷新操作而苦苦挣扎。
我想在点击按钮时刷新路由器的组件。
当我点击它时,我有刷新按钮需要刷新组件/路由器。
我试过window.location.reload()
和location.reload()
这两个不适合我的需要。如果有人知道,请帮忙。
答案 0 :(得分:46)
经过一些研究和修改我的代码如下,该脚本为我工作。我刚刚添加条件:
this.router.navigateByUrl('/RefrshComponent', {skipLocationChange: true}).then(()=>
this.router.navigate(["Your actualComponent"]));
答案 1 :(得分:18)
使用 this.ngOnInit(); 重新加载相同的组件,而不是重新加载整个页面!
DeleteEmployee(id:number)
{
this.employeeService.deleteEmployee(id)
.subscribe(
(data) =>{
console.log(data);
this.ngOnInit();
}),
err => {
console.log("Error");
}
}
答案 2 :(得分:13)
将此代码添加到所需组件构造函数的代码中。
this.router.routeReuseStrategy.shouldReuseRoute = function () {
return false;
};
this.mySubscription = this.router.events.subscribe((event) => {
if (event instanceof NavigationEnd) {
// Trick the Router into believing it's last link wasn't previously loaded
this.router.navigated = false;
}
});
请务必unsubscribe
中的 mySubscription ngOnDestroy()
。
ngOnDestroy() {
if (this.mySubscription) {
this.mySubscription.unsubscribe();
}
}
有关详细信息,请参阅此主题 - https://github.com/angular/angular/issues/13831
答案 3 :(得分:6)
幸运的是,如果您使用的是Angular 5.1+,则由于添加了本机支持,因此不再需要实施hack。您只需要在RouterModule选项中将onSameUrlNavigation设置为“重新加载” :
@ngModule({
imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: ‘reload’})],
exports: [RouterModule],
})
更多信息可以在这里找到:https://medium.com/engineering-on-the-incline/reloading-current-route-on-click-angular-5-1a1bfc740ab2
答案 4 :(得分:6)
这有点开箱即用,我不知道这是否对您有帮助,但是您尝试过
{{1}}
具有函数,因此您所拥有的任何代码都会像刷新一样被调出。
答案 5 :(得分:3)
这可以通过hack实现,导航到某个示例组件,然后导航到要重新加载的组件。
this.router.navigateByUrl('/SampleComponent', { skipLocationChange: true });
this.router.navigate(["yourLandingComponent"]);
答案 6 :(得分:2)
之前的一些答案有问题:
这对我有用(我不知道它是否值得推荐或最佳)
@Input()
tags: string[] = [];
constructor(public changeDetector: ChangeDetectorRef )
constructor(private vcrf: ViewContainerRef, private cfr: ComponentFactoryResolver, private elementRef: ElementRef) {
}
public loadComponent(): void {
const componentFactory = this.cfr.resolveComponentFactory(TagsListComponent);
const component = this.container.createComponent(componentFactory);
component.instance.tags = /* whatever data we want to pass */;
component.instance.changeDetector.markForCheck();
...
loadComponent() 是一个可以调用的自定义函数,例如,一旦父页面滚动到父组件中的某个位置,表示应该显示动态组件。
答案 7 :(得分:2)
只需这样做:(对于9号角)
import { Inject } from '@angular/core';
import { DOCUMENT } from '@angular/common';
constructor(@Inject(DOCUMENT) private document: Document){ }
someMethode(){ this.document.location.reload(); }
答案 8 :(得分:1)
只需按照以下步骤操作:
{onSameUrlNavigation: 'reload'}
@NgModule({
进口:[ RouterModule.forRoot(routes,{onSameUrlNavigation: 'reload'})],
出口:[路由器模块]
})
this.router.routeReuseStrategy.shouldReuseRoute = () => false
如下:constructor(private router: Router) {
this.router.routeReuseStrategy.shouldReuseRoute = () => false;
}
this.router.navigate([/sameRoute]);
。
将 sameRoute 替换为您的路线网址。我使用的是 Angular 12。
答案 9 :(得分:1)
在我的应用程序中,我有组件,并且所有数据均来自我在组件的构造函数中调用的API。 我通过按钮可以更新页面数据。在按钮上单击,我将数据保存在后端并刷新数据。 因此,按照我的要求,重新加载/刷新组件仅是刷新数据。 如果这也是您的要求,请使用在组件的构造函数中编写的相同代码。
答案 10 :(得分:0)
另一种没有显式路由的方式:
peaks <- c(2:10)
l <- length(peaks)
result <- l - peaks
result[result > 0]
答案 11 :(得分:0)
reload () { this.ngOnInit(); }
答案 12 :(得分:0)
router.navigate['/path']
只会带你到指定的路径
使用 router.navigateByUrl('/path')
它重新加载整个页面
答案 13 :(得分:0)
就我而言,我想refresh the whole page
而不只是组件,这就是我的做法
window.location.reload();
答案 14 :(得分:0)
只需从角度路由器更改routeReuseStrategy:
this._router.routeReuseStrategy.shouldReuseRoute = function () {
return false;
};
将“已导航”的路由器属性设置为false:
this._router.navigated = false;
然后导航到您的组件:
this._router.navigate(['routeToYourComponent'])
之后,恢复旧的/默认的routeReuseStrategy:
this._router.routeReuseStrategy.shouldReuseRoute = function (future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {
return future.routeConfig === curr.routeConfig;
您还可以使用以下服务:
@Injectable({
providedIn: 'root'
})
export class RouterService {
constructor(
private _activatedRoute: ActivatedRoute,
private _router: Router
) { }
reuseRoutes(reuse: boolean) {
if (!reuse) {
this._router.routeReuseStrategy.shouldReuseRoute = function () {
return false;
};
}
if (reuse) {
this._router.routeReuseStrategy.shouldReuseRoute = function (future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {
return future.routeConfig === curr.routeConfig;
};
}
}
async refreshPage(url?: string) {
this._router.routeReuseStrategy.shouldReuseRoute = function () {
return false;
};
this._router.navigated = false;
url ? await this._router.navigate([url]) : await this._router.navigate([], { relativeTo: this._activatedRoute });
this._router.routeReuseStrategy.shouldReuseRoute = function (future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {
return future.routeConfig === curr.routeConfig;
};
}
}
答案 15 :(得分:0)
html文件
<a (click)= "getcoursedetails(obj.Id)" routerLinkActive="active" class="btn btn-danger">Read more...</a>
ts文件
getcoursedetails(id)
{
this._route.navigateByUrl('/RefreshComponent', { skipLocationChange: true }).then(() => {
this._route.navigate(["course",id]);
});
答案 16 :(得分:0)
<p>Default table:</p>
<table>
<tr>
<td>First cell</td>
<td>Second cell</td>
</tr>
</table>
<p>Removed spacing:</p>
<table class="no-spacing" cellspacing="0"> <!-- cellspacing 0 to support IE6 and IE7 -->
<tr>
<td>First cell</td>
<td>Second cell</td>
</tr>
</table>
答案 17 :(得分:0)
kdo
// reload page hack methode
push(uri: string) {
this.location.replaceState(uri) // force replace and no show change
await this.router.navigate([uri, { "refresh": (new Date).getTime() }]);
this.location.replaceState(uri) // replace
}
答案 18 :(得分:0)
以角度2刷新(硬盘)页面的其他方式
看起来像f5
import { Location } from '@angular/common';
constructor(private location: Location) {}
pageRefresh() {
location.reload();
}