각도 2 라우터 기본 설정 없음


195

오류가 발생하여 이유를 찾을 수 없습니다. 오류는 다음과 같습니다.

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)

라우터가 왜 이것을 던지고 있는지 아는 사람이 있습니까? angular2 베타를 사용하고 있습니다

여기 내 코드가 있습니다 :

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 {
}

답변:


376

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

<head>태그 바로 뒤에 기본 요소를 추가하십시오 . 는 IF app는 우리의 응용 프로그램처럼 폴더, 응용 프로그램 루트의 설정 href값을 정확히 다음과 같이.

<base href="https://stackoverflow.com/">URL의 정적 부분을 Angular 라우터에 알려줍니다. 그런 다음 라우터는 URL의 나머지 부분 만 수정합니다.

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

또는 추가

> = Angular2 RC.6

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

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

당신의 부트 스트랩에.

이전 버전에서는 수입품이

<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 : '/' });
]); 

<베타 .17

import {APP_BASE_HREF} from 'angular2/router';

> = 베타 .17

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

베타에서 위치 및 HashLocationStrategy 작동이 중지 된 경우 도 참조하십시오 .16


3
두 번째 방법의 작은 예 :bootstrap(AppComponent, [ROUTER_PROVIDERS, provide(APP_BASE_HREF, {useValue : '/'})]);
malloc4k

1
import {provide} from 'angular2/core';제공을 사용 하려면 가져 오기 줄을 추가 해야했습니다.
CorayThan

2
라인을 가져와야했습니다import {APP_BASE_HREF} from 'angular2/router';
jimmystormig

업데이트 해 주셔서 감사합니다. TS를 직접 사용하지 않고 (Dart 만 해당) 내 TS 지식은 여전히 ​​제한되어 있습니다.
Günter Zöchbauer

1
내 프로젝트에는 이미지 패턴으로 채워진 SVG 요소가 있습니다. 때 이미지가 파이어 폭스에서 표시되지 않았던 <base href="https://stackoverflow.com/" />파일에 설정 (대한 "/", "./", "#"또는 기타 기본 경로, 이미지 경로 자체가 패턴으로 지정된 방법에 상관없이). 마침내 효과가 있었던 유일한 솔루션은 APP_BASE_HREF대신 사용하는 것입니다. 실제 생명의 은인!
ConnorsFan

34

Angular4 및 Jasmine 단위 테스트와 비슷한 문제에 직면했습니다. 주어진 솔루션이 나를 위해 일했습니다.

수입 명세서 아래에 추가

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

TestBed 구성에 대한 아래 설명을 추가하십시오.

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

11

app.module.ts에 다음을 포함시켜 해시 기반 탐색을 사용할 수도 있습니다.

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

@NgModule ({...})에 다음을 추가하여

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

TypeScript를 사용한 Angular 2 개발

“HashLocationStrategy— 해시 기호 (#)가 URL에 추가되고 해시 뒤의 URL 세그먼트는 웹 페이지 조각으로 사용될 경로를 고유하게 식별합니다. 이 전략은 기존 브라우저를 포함한 모든 브라우저에서 작동합니다. "

발췌 : Yakov Fain Anton Moiseev. “TypeScript를 사용한 Angular 2 개발”


고마워 Lionel! 이것은 훌륭하고 "product / : id"와 같은 url 매개 변수를 사용할 때 위의 APP_BASE_HREF 솔루션을 사용하여 발생한 문제를 해결했습니다. 감사!
Stokely

8

2.0 베타 이후 :)

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

Rc6 현재,이 모든 것은 현재 제공자입니다 : angular.io/docs/ts/latest/api/common/index/…
Mark Kenny

1
Karma의 스펙이 Error : No base href set으로 실패했을 때 도움이되었습니다. APP_BASE_HREF 토큰에 대한 값을 제공하거나 문서에 기본 요소를 추가하십시오.
정렬

6

그것은 index.html head 태그에 아래 코드를 추가하는 것입니다.

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

그것은 저에게 매력처럼 작용했습니다.


5

각도 4를 사용하면 다음과 같이 app.module.ts 파일을 업데이트 하여이 문제를 해결할 수 있습니다 .

아래와 같이 상단에 import 문을 추가하십시오.

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

그리고 아래 줄을 추가하십시오 @NgModule

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

참조 : https://angular.io/api/common/APP_BASE_HREF


useValue가 '/ my / app'이어야하는 이유는 무엇입니까?
Dilip Nannaware

5

각도 7,8 수정은 app.module.ts에 있습니다.

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

@NgModule 내부에 추가

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


각도 스토리 북의 구성 요소를로드하려고 할 때이 오류가 발생했습니다. 이 구성 요소에는 라우터 종속성이 있습니다. 오류를 해결했습니다 !!
Arpan Banerjee

1

index.html을 확인하십시오. 실수로 다음 부품을 제거한 경우 포함 시키십시오.

<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">
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.