是否有一个参数提供给路由器,以便router.navigate()将在浏览器的新选项卡/窗口中打开?
如何在不涉及路由的组件中获取ActivatedRoute?
我尝试这样:
constructor(
private _route: ActivatedRoute,
) {
this._route.params.subscribe((params: Params) => {
console.log(params['param1'], params['param2']);
});
}
Run Code Online (Sandbox Code Playgroud)
它记录未定义,未定义。
我的应用程序组件(Angular 2 组件,针对index.html 降级)包含以下内容:
<router-outlet></router-outlet>
<div ng-view></div>
Run Code Online (Sandbox Code Playgroud)
这就像“在 Angular 和 AngularJS 之间划分路由”中所说的那样 https://angular.io/docs/ts/latest/guide/upgrade.html#!#adding-the-angular-router-and-bootstrap
但 ng-view 没有获取任何 AngularJS 路由。
ng-view无论如何,Angular 2 模板如何工作?我怎样才能同时使用两种类型的路由器?
<router-outlet></router-outlet>也不起作用——这个 html 只是静态地按原样显示在页面上。
我有<base href="/">并且 javascript 控制台没有错误。
谷歌,给我发消息:) who/ajxtaylor
我正在使用 auth0 中的 angular2-jwt 包。一切工作正常,但现在我想知道如何重定向当前位于某个路径上的用户,该路径由我的身份验证守卫在其他地方保护。现在,当用户尝试访问受保护的路径时,它会进行重定向。
我知道我可以隐藏组件中的对象,但是我必须在每个受保护的组件中执行此操作,这还不清楚。
这是我的路线:
const appRoutes: Routes = [
{path: 'login', component: LoginComponent},
{path: 'register', component: RegisterComponent},
{path: '', component: HomeComponent},
{path: 'user/edit', component: EditProfileComponent, canActivate: [AuthGuard]},
];
Run Code Online (Sandbox Code Playgroud)
这是我的警卫服务:
...
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private auth: AuthService, private router: Router) {
}
canActivate() {
if (this.auth.loggedIn()) {
return true;
}
this.router.navigate(['/']);
return false;
}
}
Run Code Online (Sandbox Code Playgroud) 我想创建一个模块来侦听路线更改,并在路线更改时根据当前路线和转到下一条路线执行给定的动画。基本上它应该解决这个问题:https://github.com/angular/angular/issues/9845
像这样(草稿注释):https://github.com/bergben/ng2-page-transition/issues/6
现在要做到这一点,我想通过组件进入和离开时的路线数据执行给定的动画。该动画可能会根据当前路线和下一条路线而有所不同。例如,切换到/mainfrom/first可能会触发后退动画,而切换到/mainfrom/second可能会触发前进动画。
现在的问题是:如何将此动画绑定到组件并允许其完成?路由器渲染一个像这样的组件:
<router-outlet></router-outlet>
<my-current-component>...</my-current-component>
Run Code Online (Sandbox Code Playgroud)
但在路线改变时,它会立即销毁<my-current-component>...</my-current-component>并用新组件替换它。
我知道将动画绑定到组件装饰器中的主机如下: https: //github.com/designcourse/angular-auth-demo/blob/master/src/app/login/login.component.ts#L11 允许它们去完成。但我无法更改路由更改时的组件(它是一个常量,请参阅https://angular.io/docs/ts/latest/api/router/index/ActivatedRoute-interface.html#!#component-anchor)
我应该提到的是,我发现将另一个元素包裹在渲染的组件周围,例如
<router-outlet></router-outlet>
<div>
<my-current-component>...</my-current-component>
</div>
Run Code Online (Sandbox Code Playgroud)
防止路由器破坏组件。但直接访问 DOM 并不是最佳实践。我只会认为这是最后的手段。如果有人知道如何<div></div>通过 Angular Renderer 或 ViewContainerRef 等来包装组件,那么我很高兴听到这一点。然后我可以将动画绑定到该<div></div>包装器并在动画完成后手动销毁它。
动画应该在不延迟新组件进入动画的情况下执行。
所以我希望有人能够对如何以最好的方式实现这一目标提出想法/建议。
是否有一种干净的方法可以将当前可选的 queryParams 与模板中链接上的附加可选 queryParam 合并?
当前网址:/search;brand=Trek
所需的转到链接:/search;brand=Trek;start=1(startCount 将递增)
我知道 Angular 支持合并普通queryParams 的功能(https://angular.io/docs/ts/latest/api/router/index/RouterLink-directive.html),但我认为它不适用于可选的queryParams。
这就是为什么这不起作用:
<a class="nav-btn"
queryParamsHandling="merge"
[routerLink]="[ { start: startCount+1 } ]">
Next Page
</a>
Run Code Online (Sandbox Code Playgroud)
有什么建议么?
我在每个链接上使用 Angular2 和 Angular2 [routerLinkActive] 来设置活动链接。这一切都很好。当用户单击链接时,路线将变为活动状态,并且链接会注入“活动”类,我可以相应地设置样式。
但是,在路线设置中,我设置了默认路线,如下所示:
const routes: Routes = [
{ path: '', redirectTo: 'gettiingstarted', pathMatch: 'full' },
Run Code Online (Sandbox Code Playgroud)
只要页面现在在用户首次导航到页面时成功加载“gettingstarted”组件,这种方法就有效,但不幸的是,路由器链接此时尚未注入“active”类,因此样式不正确。获取活动类的唯一方法是实际单击链接。
有谁知道如何让 [routerLinkActive] 机制在页面加载上工作?
更新 这里是链接本身的代码 html:
<a [routerLink]="['gettingstarted']" [routerLinkActive]="['active']">
Run Code Online (Sandbox Code Playgroud) 我是 Angular 2 的新手,这里显示了将显示我的 url 的路由器代码。 现在路由器代码 ,当我运行该代码时,网址看起来像这样..
本地主机:50465/促销%3Fid%3D/51059
在该网址中显示%3F而不是问号(?)和%3D而不是等于(=)。展示如何显示我的原始网址。我的代码看起来像那样。
我想这样输出: http://localhost:50465/promotion?id=132
如何才能实现这一点,请帮助我。
请帮我..!!
出于好奇,我尝试将ActivatedRoute的 param 分配给定义为数字的变量:
public id: number;
constructor(public activatedRoute: ActivatedRouter) {}
public ngOnInit() {
this.activatedRoute.params.take(1).subscribe((params) => {
this.id = params['id']; // I was expecting to see a warning here
}
}
Run Code Online (Sandbox Code Playgroud)
...并且它在我的 IDE 和 tslint 中没有任何警告地通过了。所以我深入研究它并发现它发出声明的参数(此处)以包含any元素:
export type Params = {
[key: string]: any
};
Run Code Online (Sandbox Code Playgroud)
问题是为什么?AFAIK 所有参数始终是字符串。有没有办法让 Angular 知道我们的一些参数应该是numberorarray并且它会解析它?
我有一个指向仪表板的示例登录页面。登录页面设置为初始重定向页面,并路由至仪表板。仪表板包含一个带有一些链接的下拉菜单。每次单击链接时,它都会重定向到登录页面。但是,当重新加载仪表板页面时,下拉菜单可以完全正常工作。
我正在考虑使用“event.preventDefault()”作为链接,但我希望有一个解决方法。
仪表板菜单 - HTML
<div class="navbar-default sidebar" role="navigation">
<div class="sidebar-nav navbar-collapse">
<ul class="nav" id="side-menu">
<li>
<a href="#"><i class="fa fa-calendar fa-fw"></i> Manage Events<span class="fa arrow"></span></a>
<ul class="nav nav-second-level collapse">
<li>
<a href="#">Lorem Ipsum</a>
</li>
<li>
<a href="#">Lorem Ipsum</a>
</li>
</ul>
<!-- /.nav-second-level -->
</li>
</ul>
</div>
<!-- /.sidebar-collapse -->
</div>
Run Code Online (Sandbox Code Playgroud)
编辑:在得到一些回复后,我想澄清我的主要问题。问题存在于链接为空链接,并且 Angular 2 将其视为空链接并导致其重定向。如果我能找到一种解决方法来告诉 Angular,不要将此链接视为空链接,那将是理想的选择。