Router 2 sudut tidak ada href dasar yang ditetapkan

195

Saya mendapatkan kesalahan dan tidak dapat menemukan alasannya. Inilah kesalahannya:

EXCEPTION: Error during instantiation of LocationStrategy! (RouterOutlet -> Router -> Location -> LocationStrategy).
    angular2.dev.js:23514 EXCEPTION: Error during instantiation of LocationStrategy! (RouterOutlet -> Router -> Location -> LocationStrategy).BrowserDomAdapter.logError @ angular2.dev.js:23514BrowserDomAdapter.logGroup @ angular2.dev.js:23525ExceptionHandler.call @ angular2.dev.js:1145(anonymous function) @ angular2.dev.js:14801NgZone._notifyOnError @ angular2.dev.js:5796collection_1.StringMapWrapper.merge.onError @ angular2.dev.js:5700run @ angular2-polyfills.js:141(anonymous function) @ angular2.dev.js:5719zoneBoundFn @ angular2-polyfills.js:111lib$es6$promise$$internal$$tryCatch @ angular2-polyfills.js:1511lib$es6$promise$$internal$$invokeCallback @ angular2-polyfills.js:1523lib$es6$promise$$internal$$publish @ angular2-polyfills.js:1494(anonymous function) @ angular2-polyfills.js:243microtask @ angular2.dev.js:5751run @ angular2-polyfills.js:138(anonymous function) @ angular2.dev.js:5719zoneBoundFn @ angular2-polyfills.js:111lib$es6$promise$asap$$flush @ angular2-polyfills.js:1305
    angular2.dev.js:23514 ORIGINAL EXCEPTION: No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.BrowserDomAdapter.logError @ angular2.dev.js:23514ExceptionHandler.call @ angular2.dev.js:1154(anonymous function) @ angular2.dev.js:14801NgZone._notifyOnError @ angular2.dev.js:5796collection_1.StringMapWrapper.merge.onError @ angular2.dev.js:5700run @ angular2-polyfills.js:141(anonymous function) @ angular2.dev.js:5719zoneBoundFn @ angular2-polyfills.js:111lib$es6$promise$$internal$$tryCatch @ angular2-polyfills.js:1511lib$es6$promise$$internal$$invokeCallback @ angular2-polyfills.js:1523lib$es6$promise$$internal$$publish @ angular2-polyfills.js:1494(anonymous function) @ angular2-polyfills.js:243microtask @ angular2.dev.js:5751run @ angular2-polyfills.js:138(anonymous function) @ angular2.dev.js:5719zoneBoundFn @ angular2-polyfills.js:111lib$es6$promise$asap$$flush @ angular2-polyfills.js:1305
    angular2.dev.js:23514 ORIGINAL STACKTRACE:BrowserDomAdapter.logError @ angular2.dev.js:23514ExceptionHandler.call @ angular2.dev.js:1157(anonymous function) @ angular2.dev.js:14801NgZone._notifyOnError @ angular2.dev.js:5796collection_1.StringMapWrapper.merge.onError @ angular2.dev.js:5700run @ angular2-polyfills.js:141(anonymous function) @ angular2.dev.js:5719zoneBoundFn @ angular2-polyfills.js:111lib$es6$promise$$internal$$tryCatch @ angular2-polyfills.js:1511lib$es6$promise$$internal$$invokeCallback @ angular2-polyfills.js:1523lib$es6$promise$$internal$$publish @ angular2-polyfills.js:1494(anonymous function) @ angular2-polyfills.js:243microtask @ angular2.dev.js:5751run @ angular2-polyfills.js:138(anonymous function) @ angular2.dev.js:5719zoneBoundFn @ angular2-polyfills.js:111lib$es6$promise$asap$$flush @ angular2-polyfills.js:1305
    angular2.dev.js:23514 Error: No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.
        at new BaseException (angular2.dev.js:8080)
        at new PathLocationStrategy (router.dev.js:1203)
        at angular2.dev.js:1380
        at Injector._instantiate (angular2.dev.js:11923)
        at Injector._instantiateProvider (angular2.dev.js:11859)
        at Injector._new (angular2.dev.js:11849)
        at InjectorDynamicStrategy.getObjByKeyId (angular2.dev.js:11733)
        at Injector._getByKeyDefault (angular2.dev.js:12048)
        at Injector._getByKey (angular2.dev.js:12002)
        at Injector._getByDependency (angular2.dev.js:11990)

Adakah yang tahu mengapa router melempar ini? Saya menggunakan angular2 beta

ini kode saya:

import {Component} from 'angular2/core';
import { RouteConfig, ROUTER_DIRECTIVES } from 'angular2/router';
import {LoginComponent} from './pages/login/login.component';
import {DashboardComponent} from './pages/dashboard/dashboard.component';
@Component({
    selector: 'app',
    directives:[ROUTER_DIRECTIVES],
    template:`
        <div class="wrapper">
            <router-outlet></router-outlet>
        </div>`
})
@RouteConfig([
    { path: '/',redirectTo: '/dashboard' },
    { path: '/login',name:'login',component: LoginComponent },
    { path: '/dashboard',name:'dashboard',component: DashboardComponent,}
])
export class AppComponent {
}
Jason Spick
sumber

Jawaban:

376

https://angular.io/docs/ts/latest/guide/router.html

Tambahkan elemen dasar tepat setelah <head>tag. Jika appfolder tersebut adalah root aplikasi, seperti untuk aplikasi kita, tetapkan hrefnilainya persis seperti yang ditunjukkan di sini.

The <base href="https://stackoverflow.com/">memberitahu router sudut apa adalah bagian statis dari URL. Router kemudian hanya memodifikasi bagian URL yang tersisa.

<head>
  <base href="/">
  ...
</head>

Atau tambahkan

> = Angular2 RC.6

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

@NgModule({
  declarations: [AppComponent],
  imports: [routing /* or RouterModule */], 
  providers: [{provide: APP_BASE_HREF, useValue : '/' }]
]); 

di bootstrap Anda.

Dalam versi yang lebih lama, impor harus seperti

<Angular2 RC.6

import {APP_BASE_HREF} from '@angular/common';
bootstrap(AppComponent, [
  ROUTER_PROVIDERS, 
  {provide: APP_BASE_HREF, useValue : '/' });
]); 

<RC.0

import {provide} from 'angular2/core';
bootstrap(AppComponent, [
  ROUTER_PROVIDERS, 
  provide(APP_BASE_HREF, {useValue : '/' });
]); 

<beta.17

import {APP_BASE_HREF} from 'angular2/router';

> = beta.17

import {APP_BASE_HREF} from 'angular2/platform/common';

Lihat juga Lokasi dan HashLocationStrategy berhenti bekerja di beta.16

Günter Zöchbauer
sumber
3
Contoh kecil cara kedua:bootstrap(AppComponent, [ROUTER_PROVIDERS, provide(APP_BASE_HREF, {useValue : '/'})]);
malloc4k
1
Saya harus menambahkan jalur impor import {provide} from 'angular2/core';untuk dapat menggunakan penawaran.
CorayThan
2
Saya harus mengimpor barisimport {APP_BASE_HREF} from 'angular2/router';
jimmystormig
Terima kasih atas pembaruannya. Saya tidak menggunakan TS sendiri (hanya Dart) dan pengetahuan TS saya masih terbatas.
Günter Zöchbauer
1
Proyek saya memiliki elemen SVG yang diisi dengan pola gambar. Gambar tidak pernah ditampilkan di Firefox ketika <base href="https://stackoverflow.com/" />didirikan dalam file (untuk "/", "./", "#"atau path basis lain, tidak peduli seberapa jalur citra diri yang ditentukan dalam pola). Satu-satunya solusi yang akhirnya berhasil adalah menggunakan APP_BASE_HREF. Penghemat kehidupan nyata!
ConnorsFan
34

Saya menghadapi masalah serupa dengan tes unit Angular4 dan Jasmine; solusi yang diberikan di bawah ini bekerja untuk saya

Tambahkan pernyataan impor di bawah ini

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

Tambahkan pernyataan di bawah ini untuk konfigurasi TestBed:

TestBed.configureTestingModule({
    providers: [
        { provide: APP_BASE_HREF, useValue : '/' }
    ]
})
Dilip Nannaware
sumber
11

Anda juga dapat menggunakan navigasi berbasis hash dengan memasukkan yang berikut ini di app.module.ts

import { LocationStrategy, HashLocationStrategy } from '@angular/common';

dan dengan menambahkan yang berikut ke @NgModule ({...})

@NgModule({
  ...
  providers:    [
      ProductService, {
          provide: LocationStrategy, useClass: HashLocationStrategy
      }
  ],
  ...
})

Pengembangan Sudut 2 dengan TypeScript

“HashLocationStrategy — tanda hash (#) ditambahkan ke URL, dan segmen URL setelah hash secara unik mengidentifikasi rute yang akan digunakan sebagai fragmen halaman web. Strategi ini bekerja dengan semua browser, termasuk yang lama. "

Kutipan Dari: Yakov Fain Anton Moiseev. "Pengembangan 2 Sudut dengan TypeScript."

Lionel Morrison
sumber
Lionel terima kasih! Ini sangat bagus dan memecahkan masalah yang saya gunakan menggunakan solusi APP_BASE_HREF di atas yang gagal saat menggunakan parameter url seperti "product /: id". Terima kasih!
Stokely
8

Sejak 2.0 beta :)

import { APP_BASE_HREF } from 'angular2/platform/common';
Fireaxe
sumber
Pada Rc6 ini semua ada dalam penyedia sekarang: angular.io/docs/ts/latest/api/common/index/…
Mark Kenny
1
Ini membantu saya ketika spec saya di Karma gagal dengan Error: No base href set. Berikan nilai untuk token APP_BASE_HREF atau tambahkan elemen dasar ke dokumen.
Diselaraskan
6

hanya saja tambahkan kode di bawah ini di tag kepala index.html

   <html>
    <head>
     <base href="https://stackoverflow.com/">
      ...

itu bekerja seperti pesona bagi saya.

naram kiran
sumber
5

Dengan angular 4 Anda dapat memperbaiki masalah ini dengan memperbarui file app.module.ts sebagai berikut:

Tambahkan pernyataan impor di bagian atas seperti di bawah ini:

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

Dan tambahkan baris di bawah ini di dalam @NgModule

providers: [{provide: APP_BASE_HREF, useValue: '/my/app'}]

Reff: https://angular.io/api/common/APP_BASE_HREF

Suresh Kamrushi
sumber
Mengapa useValue harus '/ my / app'?
Dilip Nannaware
5

Perbaikan 7,8 sudut ada di app.module.ts

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

di dalam @NgModule tambahkan

providers: [{provide: APP_BASE_HREF, useValue: '/'}]

Feng Zhang
sumber
Saya menghadapi kesalahan ini ketika mencoba memuat komponen untuk buku cerita sudut. Komponen ini memiliki ketergantungan router. Itu memecahkan kesalahan !!
Arpan Banerjee
1

Periksa index.html Anda. Jika Anda tidak sengaja menghapus bagian berikut, sertakan dan itu akan baik-baik saja

<base href="https://stackoverflow.com/">

<meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
Tadele Ayelegn
sumber