GVKun编程网logo

配置angular2 app导航和路由时出错(angular配置代理)

17

如果您想了解配置angular2app导航和路由时出错的相关知识,那么本文是一篇不可错过的文章,我们将对angular配置代理进行全面详尽的解释,并且为您提供关于Angular2–在导航点击时隐藏bo

如果您想了解配置angular2 app导航和路由时出错的相关知识,那么本文是一篇不可错过的文章,我们将对angular配置代理进行全面详尽的解释,并且为您提供关于Angular 2 – 在导航点击时隐藏bootstrap导航栏、Angular 2路由器在路由时刷新页面、Angular 2路由并直接访问特定路由:如何配置Apache?、Angular routing生成路由和路由的跳转的有价值的信息。

本文目录一览:

配置angular2 app导航和路由时出错(angular配置代理)

配置angular2 app导航和路由时出错(angular配置代理)

尝试使用angular-cli创建一个带有angular2的应用程序我面临以下问题:
我想配置导航和路由,但是我收到以下错误:

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">
      &#9776;
    </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导航栏

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路由器在路由时刷新页面

Angular 2路由器在路由时刷新页面

我正在尝试在学习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.

谢谢您的任何见解.

解决方法

您应该使用routerLink指令导航到路由:

<a [routerLink]="['Link']">link</a>

由于您已将ROUTER_DIRECTIVES指定到组件的directives属性中,因此该指令可直接使用

Angular 2路由并直接访问特定路由:如何配置Apache?

Angular 2路由并直接访问特定路由:如何配置Apache?

我开发了一个小的Angular2测试应用程序,其中包括利用路由功能.

只要用户首先访问主页,它就可以正常工作,然后导航到子页面.

如果用户尝试直接访问子页面,如果我没有配置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 { }
好的,所以一切都很好,除了动态生成的基础href是错误的事实.

感谢@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 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生成路由和路由的跳转的相关知识,请在本站进行查询。

本文标签: