代码之家  ›  专栏  ›  技术社区  ›  ufk

angle 2 rc1-如何正确使用路由器

  •  2
  • ufk  · 技术社区  · 10 年前

    我正在用打字稿写一个angular2流星应用程序。

    angular2流星0.5.5现在支持angular2.0.0-rc1

    这是我更新的应用程序。ts

    import 'reflect-metadata';
    import 'zone.js/dist/zone';
    import {Component,provide} from '@angular/core';
    import {APP_BASE_HREF} from '@angular/common';
    import {bootstrap} from 'angular2-meteor-auto-bootstrap';
    import {ROUTER_PROVIDERS, ROUTER_DIRECTIVES, Routes} from '@angular/router';
    
    import {MdToolbar} from '@angular2-material/toolbar';
    import {MdButton} from '@angular2-material/button';
    import {Welcome} from './imports/pages/welcome/welcome';
    import {AddDrink} from './imports/pages/add-drink/add-drink';
    
    @Component({
     selector: 'app',
     templateUrl: 'client/app.html',
     directives: [MdToolbar,MdButton,ROUTER_DIRECTIVES],
     providers: [ROUTER_PROVIDERS,provide(APP_BASE_HREF, { useValue: '/' })]
    })
    @Routes([
     { path: '/', component: Welcome },
     {path: '/add-drink',component:AddDrink}  
    ])
    class MyAlcoholist { }
    
    bootstrap(MyAlcoholist);
    

    这是我的主要索引。html文件:

    <body>
     <app></app>
    </body>
    

    这是主要组件html文件:

    <md-toolbar [color]="primary">
     <span>MyAlcoholist</span>&nbsp;
     <button md-raised-button color="primary">Home</button>&nbsp;
     <button md-raised-button color="primary">Add Drink</button>&nbsp;
     <span class="span-fill-remaining-space"></span>
     <login-buttons></login-buttons>
    </md-toolbar>
    <router-outlet></router-outlet>
    

    现在,我尝试浏览应用程序,但出现了很多错误:

    EXCEPTION: Template parse errors:
    Can't bind to 'href' since it isn't a known native property ("<md-toolbar [color]="primary">
    <span>MyAlcoholist</span>&nbsp;
    [ERROR ->]<button md-raised-button color="primary" [routerLink]="['/Welcome']">Home</button>&nbsp;
    <button "): MyAlcoholist@2:4
    Can't bind to 'href' since it isn't a known native property ("p;
    <button md-raised-button color="primary" [routerLink]="['/Welcome']">Home</button>&nbsp;
    [ERROR ->]<button md-raised-button color="primary" [routerLink]="['/AddDrink']">Add Drink</button>&nbsp;
    <s"): MyAlcoholist@3:4
    VM1477:27 EXCEPTION: Template parse errors:
    Can't bind to 'href' since it isn't a known native property ("<md-toolbar [color]="primary">
    <span>MyAlcoholist</span>&nbsp;
    [ERROR ->]<button md-raised-button color="primary" [routerLink]="['/Welcome']">Home</button>&nbsp;
    <button "): MyAlcoholist@2:4
    Can't bind to 'href' since it isn't a known native property ("p;
    <button md-raised-button color="primary" [routerLink]="['/Welcome']">Home</button>&nbsp;
    [ERROR ->]<button md-raised-button color="primary" [routerLink]="['/AddDrink']">Add Drink</button>&nbsp;
    <s"): MyAlcoholist@3:4window.console.error @ VM1477:27BrowserDomAdapter.logError @ browser_adapter.js:77BrowserDomAdapter.logGroup @ browser_adapter.js:87ExceptionHandler.call @ exception_handler.js:57(anonymous function) @ application_ref.js:296(anonymous function) @ dynamics_browser.js:51ZoneDelegate.invoke @ zone.js:323NgZoneImpl.inner.inner.fork.onInvoke @ ng_zone_impl.js:45ZoneDelegate.invoke @ zone.js:322Zone.run @ zone.js:216(anonymous function) @ zone.js:571ZoneDelegate.invokeTask @ zone.js:356NgZoneImpl.inner.inner.fork.onInvokeTask @ ng_zone_impl.js:36ZoneDelegate.invokeTask @ zone.js:355Zone.runTask @ zone.js:256drainMicroTaskQueue @ zone.js:474ZoneTask.invoke @ zone.js:426
    browser_adapter.js:86 EXCEPTION: Error: Uncaught (in promise): Template parse errors:
    Can't bind to 'href' since it isn't a known native property ("<md-toolbar [color]="primary">
    <span>MyAlcoholist</span>&nbsp;
    [ERROR ->]<button md-raised-button color="primary" [routerLink]="['/Welcome']">Home</button>&nbsp;
    <button "): MyAlcoholist@2:4
    Can't bind to 'href' since it isn't a known native property ("p;
    <button md-raised-button color="primary" [routerLink]="['/Welcome']">Home</button>&nbsp;
    [ERROR ->]<button md-raised-button color="primary" [routerLink]="['/AddDrink']">Add Drink</button>&nbsp;
    <s"): MyAlcoholist@3:4
    VM1477:27 EXCEPTION: Error: Uncaught (in promise): Template parse errors:
    Can't bind to 'href' since it isn't a known native property ("<md-toolbar [color]="primary">
    <span>MyAlcoholist</span>&nbsp;
    [ERROR ->]<button md-raised-button color="primary" [routerLink]="['/Welcome']">Home</button>&nbsp;
    <button "): MyAlcoholist@2:4
    Can't bind to 'href' since it isn't a known native property ("p;
    <button md-raised-button color="primary" [routerLink]="['/Welcome']">Home</button>&nbsp;
    [ERROR ->]<button md-raised-button color="primary" [routerLink]="['/AddDrink']">Add Drink</button>&nbsp;
    <s"): MyAlcoholist@3:4window.console.error @ VM1477:27BrowserDomAdapter.logError @ browser_adapter.js:77BrowserDomAdapter.logGroup @ browser_adapter.js:87ExceptionHandler.call @ exception_handler.js:57(anonymous function) @ application_ref.js:265schedulerFn @ async.js:123SafeSubscriber.__tryOrUnsub @ Subscriber.js:225SafeSubscriber.next @ Subscriber.js:174Subscriber._next @ Subscriber.js:124Subscriber.next @ Subscriber.js:88Subject._finalNext @ Subject.js:128Subject._next @ Subject.js:120Subject.next @ Subject.js:77EventEmitter.emit @ async.js:112NgZone._zoneImpl.ng_zone_impl_1.NgZoneImpl.onError @ ng_zone.js:120NgZoneImpl.inner.inner.fork.onHandleError @ ng_zone_impl.js:66ZoneDelegate.handleError @ zone.js:327Zone.runGuarded @ zone.js:233_loop_1 @ zone.js:487drainMicroTaskQueue @ zone.js:494ZoneTask.invoke @ zone.js:426
    VM1477:27 STACKTRACE:window.console.error @ VM1477:27BrowserDomAdapter.logError @ browser_adapter.js:77ExceptionHandler.call @ exception_handler.js:59(anonymous function) @ application_ref.js:265schedulerFn @ async.js:123SafeSubscriber.__tryOrUnsub @ Subscriber.js:225SafeSubscriber.next @ Subscriber.js:174Subscriber._next @ Subscriber.js:124Subscriber.next @ Subscriber.js:88Subject._finalNext @ Subject.js:128Subject._next @ Subject.js:120Subject.next @ Subject.js:77EventEmitter.emit @ async.js:112NgZone._zoneImpl.ng_zone_impl_1.NgZoneImpl.onError @ ng_zone.js:120NgZoneImpl.inner.inner.fork.onHandleError @ ng_zone_impl.js:66ZoneDelegate.handleError @ zone.js:327Zone.runGuarded @ zone.js:233_loop_1 @ zone.js:487drainMicroTaskQueue @ zone.js:494ZoneTask.invoke @ zone.js:426
    VM1477:27 Error: Uncaught (in promise): Template parse errors:
    Can't bind to 'href' since it isn't a known native property ("<md-toolbar [color]="primary">
    <span>MyAlcoholist</span>&nbsp;
    [ERROR ->]<button md-raised-button color="primary" [routerLink]="['/Welcome']">Home</button>&nbsp;
    <button "): MyAlcoholist@2:4
    Can't bind to 'href' since it isn't a known native property ("p;
    <button md-raised-button color="primary" [routerLink]="['/Welcome']">Home</button>&nbsp;
    [ERROR ->]<button md-raised-button color="primary" [routerLink]="['/AddDrink']">Add Drink</button>&nbsp;
    <s"): MyAlcoholist@3:4
    at resolvePromise (zone.js:538)
    at zone.js:574
    at ZoneDelegate.invokeTask (zone.js:356)
    at Object.NgZoneImpl.inner.inner.fork.onInvokeTask (ng_zone_impl.js:36)
    at ZoneDelegate.invokeTask (zone.js:355)
    at Zone.runTask (zone.js:256)
    at drainMicroTaskQueue (zone.js:474)
    at XMLHttpRequest.ZoneTask.invoke (zone.js:426)window.console.error @ VM1477:27BrowserDomAdapter.logError @ browser_adapter.js:77ExceptionHandler.call @ exception_handler.js:60(anonymous function) @ application_ref.js:265schedulerFn @ async.js:123SafeSubscriber.__tryOrUnsub @ Subscriber.js:225SafeSubscriber.next @ Subscriber.js:174Subscriber._next @ Subscriber.js:124Subscriber.next @ Subscriber.js:88Subject._finalNext @ Subject.js:128Subject._next @ Subject.js:120Subject.next @ Subject.js:77EventEmitter.emit @ async.js:112NgZone._zoneImpl.ng_zone_impl_1.NgZoneImpl.onError @ ng_zone.js:120NgZoneImpl.inner.inner.fork.onHandleError @ ng_zone_impl.js:66ZoneDelegate.handleError @ zone.js:327Zone.runGuarded @ zone.js:233_loop_1 @ zone.js:487drainMicroTaskQueue @ zone.js:494ZoneTask.invoke @ zone.js:426
    VM1477:27 Unhandled Promise rejection: Template parse errors:
    Can't bind to 'href' since it isn't a known native property ("<md-toolbar [color]="primary">
    <span>MyAlcoholist</span>&nbsp;
    [ERROR ->]<button md-raised-button color="primary" [routerLink]="['/Welcome']">Home</button>&nbsp;
    <button "): MyAlcoholist@2:4
    Can't bind to 'href' since it isn't a known native property ("p;
    <button md-raised-button color="primary" [routerLink]="['/Welcome']">Home</button>&nbsp;
    [ERROR ->]<button md-raised-button color="primary" [routerLink]="['/AddDrink']">Add Drink</button>&nbsp;
    <s"): MyAlcoholist@3:4 ; Zone: angular ; Task: Promise.then ; Value: BaseException {message: "Template parse errors:↵Can't bind to 'href' since …d Drink</button>&nbsp;↵    <s"): MyAlcoholist@3:4", stack: "Error: Template parse errors:↵Can't bind to 'href'…234901849e8c5cb714d4f3d3e1d96da396c529c:45368:38)"}window.console.error @ VM1477:27consoleError @ zone.js:461_loop_1 @ zone.js:490drainMicroTaskQueue @ zone.js:494ZoneTask.invoke @ zone.js:426
    VM1477:27 Error: Uncaught (in promise): Template parse errors:(…)window.console.error @ VM1477:27consoleError @ zone.js:463_loop_1 @ zone.js:490drainMicroTaskQueue @ zone.js:494ZoneTask.invoke @ zone.js:426
    VM1477:27 Unhandled Promise rejection: Template parse errors:
    Can't bind to 'href' since it isn't a known native property ("<md-toolbar [color]="primary">
    <span>MyAlcoholist</span>&nbsp;
    [ERROR ->]<button md-raised-button color="primary" [routerLink]="['/Welcome']">Home</button>&nbsp;
    <button "): MyAlcoholist@2:4
    Can't bind to 'href' since it isn't a known native property ("p;
    <button md-raised-button color="primary" [routerLink]="['/Welcome']">Home</button>&nbsp;
    [ERROR ->]<button md-raised-button color="primary" [routerLink]="['/AddDrink']">Add Drink</button>&nbsp;
    <s"): MyAlcoholist@3:4 ; Zone: <root> ; Task: Promise.then ; Value: BaseException {message: "Template parse errors:↵Can't bind to 'href' since …d Drink</button>&nbsp;↵    <s"): MyAlcoholist@3:4", stack: "Error: Template parse errors:↵Can't bind to 'href'…234901849e8c5cb714d4f3d3e1d96da396c529c:45368:38)"}window.console.error @ VM1477:27consoleError @ zone.js:461_loop_1 @ zone.js:490drainMicroTaskQueue @ zone.js:494ZoneTask.invoke @ zone.js:426
    VM1477:27 Error: Uncaught (in promise): Template parse errors:(…)window.console.error @ VM1477:27consoleError @ zone.js:463_loop_1 @ zone.js:490drainMicroTaskQueue @ zone.js:494ZoneTask.invoke @ zone.js:426
    

    我的包裹。json包含以下内容:

    {
      "name": "myalcoholist-meteor",
      "private": true,
      "scripts": {
        "start": "meteor run"
      },
      "dependencies": {
        "@angular/common": "^2.0.0-rc.1",
        "@angular/compiler": "^2.0.0-rc.1",
        "@angular/core": "^2.0.0-rc.1",
        "@angular/platform-browser": "^2.0.0-rc.1",
        "@angular/router": "^2.0.0-rc.1",
        "@angular2-material/button": "^2.0.0-alpha.4",
        "@angular2-material/core": "^2.0.0-alpha.4",
        "@angular2-material/toolbar": "^2.0.0-alpha.4",
        "angular2-meteor": "^0.5.5",
        "angular2-meteor-auto-bootstrap": "^0.5.5",
        "es6-shim": "^0.35.0",
        "meteor-node-stubs": "^0.2.3",
        "reflect-metadata": "=0.1.2",
        "rxjs": "=5.0.0-beta.6",
        "zone.js": "^0.6.12"
      }
    }
    

    现在…当我移除 [routerLink] 属性,错误就会消失。我用得不对吗?

    2 回复  |  直到 10 年前
        1
  •  3
  •   Community Mohan Dere    9 年前

    使现代化

    这(当前)在新路由器中无效:

    <button md-raised-button color="primary" [routerLink]="['/Welcome']">
    

    改用

    <a md-raised-button color="primary" [routerLink]="['/Welcome']">
    

    同时确保 /Welcome 是注册路由的路径。新路由器使用路径onyl导航,不再有路由名称(我的一些怀疑是因为大写 W )

    起初的

    导入已更改。

    改用

    import {APP_BASE_HREF } from '@angular/common';  
    

    另请参见 Location and HashLocationStrategy stopped working in beta.16

        2
  •  0
  •   Elka    10 年前

    设置基本href的另一种方法是使用

    <base href="/">
    

    尝试将此标记放在主组件的head标记内,并尝试这是否解决了您的问题

    推荐文章