如果您想了解配置angular2app导航和路由时出错的相关知识,那么本文是一篇不可错过的文章,我们将对angular配置代理进行全面详尽的解释,并且为您提供关于Angular2–在导航点击时隐藏bo
如果您想了解配置angular2 app导航和路由时出错的相关知识,那么本文是一篇不可错过的文章,我们将对angular配置代理进行全面详尽的解释,并且为您提供关于Angular 2 – 在导航点击时隐藏bootstrap导航栏、Angular 2路由器在路由时刷新页面、Angular 2路由并直接访问特定路由:如何配置Apache?、Angular routing生成路由和路由的跳转的有价值的信息。
本文目录一览:- 配置angular2 app导航和路由时出错(angular配置代理)
- Angular 2 – 在导航点击时隐藏bootstrap导航栏
- Angular 2路由器在路由时刷新页面
- Angular 2路由并直接访问特定路由:如何配置Apache?
- Angular routing生成路由和路由的跳转
配置angular2 app导航和路由时出错(angular配置代理)
我想配置导航和路由,但是我收到以下错误:
Unhandled Promise rejection: Template parse errors: Can’t bind to
‘routerLink’ since it isn’t a kNown property of ‘a’. (“s=”navbar
navbar-fixed-top navbar-custom”>][routerLink]=”[‘/home’]”>FiT
App结构如下:
app/ core/ nav/ nav.component.ts|html|scss core.module.ts home/ home.component.ts|html|scss app-routing.module.ts app.component.ts|html|scss app.module.ts
app.module.ts
import { browserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { HttpModule } from '@angular/http'; import { AppRoutingModule } from './app-routing.module'; import { CoreModule } from './core/core.module'; import { AppComponent } from './app.component'; import { HomeComponent } from './home/home.component'; @NgModule({ declarations: [ AppComponent,HomeComponent,],imports: [ browserModule,FormsModule,HttpModule,AppRoutingModule,CoreModule ],providers: [],bootstrap: [AppComponent] }) export class AppModule { }
core.module.ts:
import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { NavComponent } from './nav/nav.component'; @NgModule({ imports: [ CommonModule // we use ngFor ],exports: [NavComponent],declarations: [NavComponent],}) export class CoreModule { }
APP-routing.module.ts
import { NgModule } from '@angular/core'; import { Routes,RouterModule } from '@angular/router'; import { HomeComponent } from './home/home.component'; const routes: Routes = [ { path: '',component: HomeComponent },{ path: 'home',]; @NgModule({ imports: [RouterModule.forRoot(routes)],exports: [RouterModule],providers: [] }) export class AppRoutingModule { }
nav.component.html
<nav> <div> <a[routerLink]="['/home']">FiT</a> <buttontype="button" data-toggle="collapse" data-target="#fit-nav" aria-controls="fit-nav" aria-expanded="false" aria-label="Toggle navigation"> ☰ </button> <divid="fit-nav"> <ul> <li> <a>link</a> </li> <li> <a>link</a> </li> <li> <a>Log in</a> </li> <li> <a>sign up</a> </li> </ul> </div> </div> </nav>
所以我试图找到答案,我已经看到了许多类似的问题,但提出的解决方案没有帮助.
代码中的一切看起来都很好.也许我错过了什么?
解决方法
@NgModule({ declarations: [ SomeComponentThatUsesRouterLink ] }) class SomeModule {} @NgModule({ imports: [ SomeModule,<== SomeComponentThatUsesRouterLink can't use routerLink RouterModule ],declarations: [ AppComponent <== Can use routerLink ] }) class AppModule {}
在这里,即使AppModule导入了RouterModule,它的范围仅限于它自己的声明,而不是SharedModule,因此SomeComponentThatUsesRouterLink不能使用routerLink指令.
现在看这里
@NgModule({ exports: [ RouterModule,CommonModule,FormsModule ] }) class SharedModule {} @NgModule({ imports: [ SharedModule ],declarations: [ SomeComponentThatUsesRouterLink ] }) class SomeModule {}
现在SomeModule可以使用RouteModule指令,因为它导入了一个导出它的模块
或者如果你想要SomeModule只能导入RouterModule本身
@NgModule({ imports: [ RouterModule ],declarations: [ SomeComponentThatUsesRouterLink ] }) class SomeModule {}
因此,要在特定情况下解决问题,需要将RouterModule导入CoreModule,因为NavComponent需要路由器指令
Angular 2 – 在导航点击时隐藏bootstrap导航栏
我的菜单按钮,显示手机:
<button type="button"data-toggle="collapse" data-target="#myNavbar">
搜索此问题返回结果未发布到角度2,我不知道如何实现它们.
当用户点击链接时,如何隐藏导航栏?
<li><a routerLink="/page">Click this should hide nav</a></li>
解决方法
import { Directive,ElementRef,Input,HostListener } from "@angular/core"; @Directive({ selector: "[menuClose]" }) export class CloseMenuDirective { @input() public menu: any; constructor(private element: ElementRef) { } @HostListener("click") private onClick() { this.menu.classList.remove("show"); } }
不要忘记将它添加到声明数组中的app.module
import { CloseMenuDirective } from './directives/close-menu.directive'; @NgModule({ declarations: [ ...declarations,CloseMenuDirective ] }) export class AppModule { }
然后在HTML中创建对菜单的引用并将其传递给link元素.
<divhttps://www.jb51.cc/tag/pagelayout/" target="_blank">page-layout"> <!-- Mark the menu with #menu,thus creating a reference to it --> <asideid="navbar-header" #menu> <ul> <li> <a[routerLink]="['./somewhere']" routerLinkActive="active" menuClose <!-- Our custom directive above --> [menu]="menu"> <!-- Bind to menu --> <span>My Link</span> </a> </li> </ul> </aside> </div>
Angular 2路由器在路由时刷新页面
我的索引文件,
<!--... . . varIoUs scripts and styles . . . . . ---> <script src="node_modules/angular2/bundles/angular2.dev.js"></script> <script src="node_modules/angular2/bundles/router.dev.js"></script> <script src="node_modules/angular2/bundles/http.dev.js"></script> <script> System.config({ packages: { app: { format: 'register',defaultExtension: 'js' } } }); System.import('app/main') .then(null,console.error.bind(console)); </script> </head> <body> <app></app> </body>
应用来源,
main.ts
import {bootstrap} from 'angular2/platform/browser'; import {RoutingApp} from './routing/routing.app' import {ROUTER_PROVIDERS} from 'angular2/router' bootstrap(RoutingApp,[ROUTER_PROVIDERS]);
RoutingApp
import {Component} from "angular2/core" import {RouteComponent} from './route.component' import { RouteConfig,ROUTER_DIRECTIVES,ROUTER_PROVIDERS } from 'angular2/router'; @Component({ selector : 'app',template : ` go to this <a href="javascript:void()"data="/link">link</a> <br /> <router-outlet></router-outlet> `,directives: [ROUTER_DIRECTIVES],providers: [ROUTER_PROVIDERS] }) @RouteConfig([ {path: '/link',name: 'Link',component: RouteComponent} ]) export class RoutingApp{ }
和RouteComponent
import {Component} from 'angular2/core' @Component({ template: ` hello from RouteComponent ` }) export class RouteComponent{}
我做错了什么? Angular版本是2.0.0-beta.7.
谢谢您的任何见解.
解决方法
<a [routerLink]="['Link']">link</a>
由于您已将ROUTER_DIRECTIVES指定到组件的directives属性中,因此该指令可直接使用
Angular 2路由并直接访问特定路由:如何配置Apache?
只要用户首先访问主页,它就可以正常工作,然后导航到子页面.
如果用户尝试直接访问子页面,如果我没有配置Web服务器,我有一个404.这是完全正常的,因为没有对应于路线的“真实页面”.
我尝试在apache 2.2中添加以下配置来处理HTML5 Push State:
<Directory /var/www/html/angular2-sens> Options Indexes FollowSymLinks RewriteEngine On RewriteBase /angular2-sens RewriteRule ^index\.html$- [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /angular2-sens/index.html [L] </Directory>
它使事情更好,因为我不再有一个404.但是,我只“重定向到应用程序的家,路由不执行.
我应该如何解决这个问题?
我的index.html页面是:
<html> <head> <title>Angular 2 QuickStart</title> <link rel="stylesheet" href="simplegrid.css" type="text/css"> <link rel="stylesheet" href="sen.css" type="text/css"> <script src="node_modules/angular2/bundles/angular2-polyfills.js"></script> <script src="node_modules/systemjs/dist/system.src.js"></script> <script src="node_modules/rxjs/bundles/Rx.js"></script> <script src="node_modules/angular2/bundles/angular2.js"></script> <script src="node_modules/angular2/bundles/http.js"></script> <script src="node_modules/angular2/bundles/router.js"></script> <!-- dev <script src="node_modules/angular2/bundles/angular2.dev.js"></script> <script src="node_modules/angular2/bundles/http.dev.js"></script> <script src="node_modules/angular2/bundles/router.dev.js"></script> --> <!-- 2. Configure SystemJS --> <script> System.config({ map: { rxjs: 'node_modules/rxjs' //or wherever you have it installed },packages: { app: { format: 'register',defaultExtension: 'js' },rxjs: { defaultExtension: 'js' } } }); System.import('app/boot') .then(null,console.error.bind(console)); </script> </head> <!-- 3. display the application --> <body> <app>Chargement...</app> </body> <script>document.write('<base href="' + document.location + '" />');</script> </html>
我的app / boot.ts是:
import {bootstrap} from 'angular2/platform/browser'; import {HTTP_PROVIDERS} from 'angular2/http'; import {AppComponent} from './app.component'; import {ROUTER_PROVIDERS} from 'angular2/router'; import { enableProdMode } from 'angular2/core'; enableProdMode(); bootstrap(AppComponent,[HTTP_PROVIDERS,ROUTER_PROVIDERS]);
最后,我的应用程序组件是:
import {bootstrap} from 'angular2/platform/browser'; import {HTTP_PROVIDERS} from 'angular2/http'; import {AppComponent} from './app.component'; import {ROUTER_PROVIDERS} from 'angular2/router'; import { enableProdMode } from 'angular2/core'; enableProdMode(); bootstrap(AppComponent,ROUTER_PROVIDERS]);
配置路由的应用程序组件是:
import {Component} from 'angular2/core'; import {RouteConfig,ROUTER_DIRECTIVES} from 'angular2/router'; import {SensComponent} from './sens.component'; import {GroupesPolitiquesComponent} from './groupes-politiques.component'; import {SenVignetteComponent} from './sen-vignette.component'; @Component({ selector: 'app',template: ` <h1>Application Angular 2 Relative aux Sénateurs (AA2RSen)</h1> <nav> <a [routerLink]="['Senateurs']">Tous les Sénateurs en cours de mandat</a> <a [routerLink]="['GroupesPolitiques']">Groupes politiques</a> </nav> <router-outlet></router-outlet> `,directives: [ROUTER_DIRECTIVES] }) @RouteConfig([ {path:'/senateurs',name: 'Senateurs',component: SensComponent},{path:'/groupes',name: 'GroupesPolitiques',component: GroupesPolitiquesComponent},{path:'/senateur/:matricule',name: 'VignetteSenateur',component: SenVignetteComponent} ]) export class AppComponent { }
感谢@günter-zöchbauer指出Angular 2.0 router not working on reloading the browser
在我的原始代码中,它是从document.location生成的:
<script>document.write('<base href="' + document.location + '" />');</script>
如果我切换到一个静态元素:
<base href="/angular2-sens/"/>
有用.当然,我宁愿进一步分析一个“真实的”应用程序中的document.location.
Angular routing生成路由和路由的跳转
Angular routing生成路由和路由的跳转
什么是路由
路由的目的是可以让根组件按照不同的需求动态加载不同的组件。
根据不同地址,加载不同组件,实现单页面应用。
Angular 命令创建一个配置好路由的项目
命令创建项目
ng new demo02 --routing
安装依赖
npm install
启动项目
ng serve --open
与没有创建路由的项目比较
创建路由项目的文件比没有创建路由项目的文件多了一个 app-routing.module.ts 文件。
然后在 app.module.ts 文件中引入了路由文件。
在 app.component.html 文件中加入了动态加载组件显示的地方。
路由学习案例
创建组件
创建几个组件,首先创建一个 components 文件夹存放将要创建的组件。
创建home组件
ng g component components/home
创建news组件
ng g component components/news
创建user组件
ng g component components/user
配置路由,点击不同的导航显示不同组件
在 app-routing.module.ts 中配置路由。
首先引入组件
// 引入组件
import {HomeComponent} from ''./components/home/home.component''
import {NewsComponent} from ''./components/news/news.component''
import {UserComponent} from ''./components/user/user.component''
配置路由
// 配置路由
const routes: Routes = [
{
path:''home'',
component:HomeComponent,
},
{
path:''news'',
component:NewsComponent,
},
{
path:''user'',
component:UserComponent,
}
];
添加导航按钮
在根组件 app.component.html 文件中添加导航。
<header>
<ul>
<li><a routerLink="home" >首页</a></li>
<li><a routerLink="news" >新闻</a></li>
<li><a routerLink="user" >用户</a></li>
</ul>
</header>
我们最简单的路由写完了!!!
但是我们发现一个问题,当我们初始化整个项目的时候,默认是没有组件的
我们如果想一进来就加载首页组件,就涉及到默认的跳转路由!
默认加载组件(空路由)
{
path:'''', // 空路由
redirectTo:''home'', // 重定向到
pathMatch:''full''
}
如果路由输入错误,还是跳回首页(也可以匹配空路由)
// 匹配不到路由时候加载的组件
{
path:''**'', // 任意路由
component:HomeComponent
}
今天的关于配置angular2 app导航和路由时出错和angular配置代理的分享已经结束,谢谢您的关注,如果想了解更多关于Angular 2 – 在导航点击时隐藏bootstrap导航栏、Angular 2路由器在路由时刷新页面、Angular 2路由并直接访问特定路由:如何配置Apache?、Angular routing生成路由和路由的跳转的相关知识,请在本站进行查询。
本文标签: