Angular Routing是一种内置功能,使您可以创建单页面应用程序(SPA)用户界面,用户可以在该界面中导航到不同的视图,而无需每次都从服务器重新加载整个页面。
由于我是 Angular 2/4 的新手,我在根据我的需要设置新应用程序时遇到了困难。 我正在尝试构建一个应用程序,该应用程序将从另一个应用程序中调用。打电话
这个问题很简单,但我无法摆脱它。 我在父模板中有一个 ,当通过路由模块显示子模板时,我需要它消失。我所期待的是 这个问题很简单,但我就是摆脱不了。 我在父模板中有一个<header>,当通过路由模块显示子模板时我需要它消失。我期望的是在 header 标签中添加一个类,这样我就可以通过 CSS 隐藏它。这就是我拥有的: app.component.ts import { Component } from '@angular/core'; @Component({ selector: 'app', template: ` <header [class.hidden]="hide"> <h1>My App</h1> <ul> <li><a href="/home"></a></li> <li><a href="/showoff"></a></li> </ul> </header> <router-outlet></router-outlet> ` }) export class AppComponent { hide = false; // <-- This is what I need to change in child component } app-routing.module.ts import { RouterModule, Routes } from '@angular/router'; import { HomeComponent } from './welcome.component'; import { ShowOffComponent } from './show.off.component'; const routes: Routes = [ { path: '', component: HomeComponent }, { path: 'showoff', component: ShowOffComponent }, ]; export const AppRouting = RouterModule.forRoot(routes, { useHash: true }); show.offf.component.ts import { Component } from '@angular/core'; @Component({ selector: 'app-showoff', template: ` <h2>Show Off</h2> <div>Some contents...</div> ` }) export class ShowOffComponent { hide = true; // <-- Here is the problem. // I don't have any idea how to reach parent variables. } 您可以使用输出发射器 在您的子组件中, import { Component } from '@angular/core'; @Component({ selector: 'app-showoff', template: ` <h2>Show Off</h2> <div>Some contents...</div> ` }) export class ShowOffComponent { @Output() onHide = new EventEmitter<boolean>(); setHide(){ this.onHide.emit(true); } } 在家长中, export class AppComponent { hide = false; changeHide(val: boolean) { this.hide = val; } } 使用该事件发射器向父级添加子级, <app-showoff (onHide)="changeHide($event)"></app-showoff> 我最近在 Angular 6 中遇到了同样的现象。 我想访问和更改属于父组件或祖父组件的变量。请参见下图。我想访问和更改属于 Tom 的变量,来自 Jim(Tom 的孩子)和 Sara(Tom 的孙子)。 可能还有其他一些解决方案,但我用来克服这个问题的方法是使用ViewContainerRef。我必须将 ViewContainerRef 注入到子组件的构造函数中,我需要访问父组件并遍历父节点(或多个节点)以查找父变量。 注入构造函数, constructor(private viewContainerRef: ViewContainerRef) { } 访问并遍历到父节点, getParentComponent() { return this.viewContainerRef[ '_data' ].componentView.component.viewContainerRef[ '_view' ].component } 我用上图中给你的场景制作了一个 StackBlitz 示例。 https://stackblitz.com/edit/angular-comms 在您的 app.component.ts 中,您可以检查您的 URL 并设置 hide 变量值,如下所示: import { Component } from '@angular/core'; import { Router, NavigationStart } from '@angular/router'; @Component({ selector: 'app', template: ` <header [class.hidden]="hide"> <h1>My App</h1> <ul> <li><a href="/home"></a></li> <li><a href="/showoff"></a></li> </ul> </header> <router-outlet></router-outlet> ` }) export class AppComponent { hide = false; // <-- This is what I need to change in child component constructor(private router: Router){} public ngOnInit() { this.router.events.subscribe((events) => { if (events instanceof NavigationStart) { if (events.url === '/' || events.url === '/home') { this.hide = false; } else { this.hide = true; } } }); } } 不太直接,但(恕我直言)更准确地实现这一目标的方法是使用服务。 创建parent-to-child.service.ts 文件并创建主题属性 导出类 ParentToChildService { 显示标题=新主题(); } 通过父组件和子组件中的构造函数将其注入: 构造函数(私有 ptcService:ParentToChildService ){} 使用 ngIf(或者你可以使用 ngClass,如果你坚持使用 CSS 方法)将标头组件绑定到其 TS 文件中的属性: html: <header *ngIf="showStatus"> TS:showStatus: boolean = true; // true by default ptcSubscription: Subscription; 在标头组件的 ngInit 上订阅该主题: ngOnInit(): { this.ptcSubscription = this.ptcService.showHeader.subscribe( (新状态:布尔值)=> { this.showStatus = newStatus }); } ); } 在您的子组件中,每当您需要隐藏 <header> 时,请在服务主题上调用 next: this.ptcService.showHeader.next(false); //隐藏标题
我需要能够模拟激活的路由参数才能测试我的组件。 这是迄今为止我最好的尝试,但它不起作用。 { 提供:ActivatedRoute,useValue:{ params:[ { 'i...
我试图通过构建一个包含两个部分的网站基本结构来了解 Angular 2 (RC5) 模块的延迟加载(想想登录页面和主网站)。我已经设置好了...
在 Angular 2 中找不到要加载的主要出口(登录页面和所有其他页面)
在app.component.html中,我设置了一个条件来决定使用哪种模板: 在app.component.html中,我设置了一个条件来决定使用哪种模板: <div *ngIf="_appService.titleName !== 'Login'"> <router-outlet></router-outlet> </div> <div ngIf="_appService.titleName === 'Login'"> <login></login> </div> 我试图在用户登录后将其重定向到应用程序的主页。为此,我使用以下方法: this._appService.titleName === 'Main page'; this._router.navigate(['/']); 通过使用这个我得到这个错误: Cannot find primary outlet to load 'MainComponent' 这让我感到不安,因为我以另一种方式进行了完全相同的注销操作(从主页重定向到登录页面),并且一切正常。 我读了一些类似的答案,但到目前为止没有一个对我有帮助,因为我不想在我的 router-outlet 中添加 login.component.html 标签,因为主页不是登录页面的子组件。 我认为我的问题是我应该使用两个 router-outlet 而不是登录选择器,但我无法让它正常工作。 我的app.routing.ts: const appRoutes: Routes = [ { path:'login', component: LoginComponent }, { path: 'main', component: MainComponent, canActivate: [AuthGuard] }, { path:'', redirectTo:'/main', pathMatch:'full' }, { path: '**', redirectTo: '' } ]; export const appRoutingProviders: any[] = []; export const routing = RouterModule.forRoot(appRoutes); 请勿在模板中使用 this: <div *ngIf="_appService.titleName !== 'Login'"> <router-outlet></router-outlet> </div> <div ngIf="_appService.titleName === 'Login'"> <login></login> </div> 您可以使用命名路由器插座 <div *ngIf="_appService.titleName === 'Login'"> <router-outlet name="login"></router-outlet> </div> 和路线 { path:'login', component: LoginComponent, outlet: 'login' }, 有关更多信息,请参阅如何添加辅助路由。
我尝试在同一项目应用程序中为我的管理模块集成一个特定的 CSS 框架(材料设计),并为我的用户模块集成另一个 CSS 框架。 如果可以的话我该怎么办。
为什么两个守卫的交互会导致 Angular 18 中的无限重定向循环?
我有路线“/”和“/auth”。逻辑是未登录的用户只能访问 /auth 页面,而登录的用户无法访问它。 所以,我做了两个守卫,出于某种原因我得到了无限......
使用 onsubmit 事件刷新页面来处理 Angular 2 和 Firebase
我正在尝试将 Firebase 应用于我昨天找到的管理 HTML 模板。 在注册页面中,当我单击“登录”时,它会重新加载页面,而不是执行 Firebase createUserWithEmailAnd...
在我的 Angular 2 应用程序中,我尝试禁用 routerLink 但没有成功。我尝试处理点击事件上的点击事件(使用 event.preventDefault() 和 event.stopPropagation())...
这是示例网址: 本地主机:4202/pages/users/STSP0001PNIENOUIJX/dashboards/level/0 应用程序路由.module.ts 常量路线:路线= [ { 路径:'页面/用户', loadChildren: () => 我...
我有一个组件,我需要检测用户是否在浏览器中按下后退按钮以导航回来。 目前我正在订阅路由器事件。 构造函数(私有路由器:路由器,私有激活...
应用程序中出现通配符路由(未找到页面)时,不会生成应用程序外壳
是的,我正在努力使用 Angular 应用程序外壳,因为我的应用程序路由中有一个通配符。我的项目是一个独立的 Angular 项目。我们该如何解决这个问题呢? app.config.server.ts 文件: 导入 {
我有一个登录组件,它是初始页面。登录成功后,它将路由到 Home 组件,该组件将包含 3 个组件:具有导航栏的 TopBar 组件和 2 个组件...
navigate 和 navigateByUrl 在 2.0.0-rc.1 上的 ngOnInit 中无法正常工作
由于 2.0.0-rc.1 router.navigate 或 router.navigateByUrl 在 ngOnInit 内部使用时似乎不再正常工作。 我没有收到错误或任何错误,但它看起来像导航
我的 Angular Spa 存在问题,用户成功注销后,默认导航回登录页面不起作用。这意味着 https://domain.tld/login 显示在...
我正在将 Angular 应用程序从 v10 升级到 v11,该应用程序使用指向名为dialog 的出口的 routerLink 来创建模式对话框。当前组件(下例中的 CoreComponent)sho...
我在 Angular 5 应用程序中遇到了这个问题,其中子路由在应该启用根路由的路由器出口处被激活。我希望阅读本文的人能够...
编辑:我找到了一种解决方法,方法是将事件过滤器更新为: 过滤器(事件=> event.type === EventType.NavigationEnd && this.route.snapshot.queryParams['test']) 哪个...
现在是第 10 个小时,我已经尝试了 20 种不同的网络配置。第一组效果很好。公司旗下的孩子只评价 本地主机:4200/Employee-pub/1 -\> 本地主机:4200/Employee-pub/1 地点...
我正在开发一个带有仪表板屏幕延迟加载功能的 Angular 应用程序。我遇到了一个问题,即延迟加载仪表板时子菜单无法正常运行。下面...