从2.4升级到Angular 4.1.2,为什么它需要绝对的Urls?

时间:2017-06-01 21:51:47

标签: angular asp.net-core

我使用的是Microsoft.AspNetCore.Spatemplates,现在正在使用angular 4.1.2。当我使用以前版本的使用角度2.4的Spatemplates时,我能够使用角度服务对我的.NET控制器执行http.get,使用相对URL来查看下面的代码。

export class MyService {
private url = 'api/myController';

constructor(private _http: Http) {
}
public getAll = (): Observable<any> => {
    return this._http.get(this.url)
        .map(data => data.json());
};

现在我正在使用新的Spatemplates,它需要一个绝对的URL。有谁知道这是为什么?

我也知道在我的app.module.client.ts中注意到我看到了一个ORIGIN_URL

imports: [
    BrowserModule,
    FormsModule,
    HttpModule,
    ...sharedConfig.imports
],
providers: [
    { provide: 'ORIGIN_URL', useValue: location.origin }
]

我假设我需要在我的服务中使用ORIGIN_URL,但不太确定如何将其注入其中。我只是觉得我不应该使用这个网址:  “http://localhost:{port#} / api / myController”在我的服务中。我是这样想的吗?

1 个答案:

答案 0 :(得分:0)

如果你想注入,并使用该提供程序'ORIGIN_URL',你可以像这样使用构造函数注入。

import { Component, Inject } from '@angular/core';
import { Http } from '@angular/http';

...
export class MyService {
    private url = '/api/myController';

    constructor(private _http: Http, @Inject('ORIGIN_URL') private originUrl: string) {
    }
    public getAll = (): Observable<any> => {
        return this._http.get(this.originUrl + this.url)
            .map(data => data.json());
    };
}

我无法确定为什么相对网址不再有效。

希望这有帮助。