2016-03-25 15 views
11

में सेवा के लिए डोमेन नाम पाने के लिए मैं एक ही सर्वर, एक और बंदरगाह पर बाकी api के लिए अनुरोध करने के लिए की जरूरत है।कैसे Angular2

कैसे मैं इस सेवा यूआरएल में पूरा नाम हार्डकोड बिना कर सकता है?

उत्तर

19

एक angular2 विशेष समाधान के लिए कोई ज़रूरत नहीं है। वर्तमान होस्टनाम प्राप्त करने के लिए आप window.location.hostname का उपयोग कर सकते हैं।

नोट, हालांकि, यदि आप window- वैश्विक रूप से वैश्विक चर का उपयोग नहीं करना चाहते हैं, तो आप अपना खुद का Window ऑब्जेक्ट प्रदान कर सकते हैं, जिसे तब इंजेक्शन दिया जा सकता है। इसलिए आप जब अपने आवेदन bootstrapping Window -object के लिए प्रदाता सेट करना होगा।

import {provide} from 'angular2/core'; 
bootstrap(..., [provide(Window, {useValue: window})]); 

उसके बाद आप विंडो ऑब्जेक्ट का उपयोग करें और इस तरह से होस्ट नाम उपयोग कर सकते हैं:

constructor(private window: Window) { 
    var hostname = this.window.location.hostname; 
} 
1

यह मिलना चाहिए आप आरंभ:

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

constructor(private locationStrategy:LocationStrategy) { 
    console.log(locationStrategy.prepareExternalUrl('xxx')); 
} 
+1

4 '@angular से आयात {LocationStrategy} का उपयोग '/सामान्य 'देखें https://angular.io/api/common/Location –

+0

संकेत के लिए बहुत बहुत धन्यवाद। तब से कई चीजें बदल गई हैं: डी –

9

एक अन्य विकल्प @ कोणीय/मंच-ब्राउज़र से डाक्यूमेंट उपयोग करने के लिए है।

import {DOCUMENT} from '@angular/platform-browser'; 

constructor(@Inject(DOCUMENT) private document) { 
    let url = document.location.protocol +'//'+ document.location.hostname + ':my_port'); 
} 
7

कोणीय 2 नवीनतम काम कर समाधान:

app.module.ts

providers: [ 
    {provide: Window, useValue: window}, 
    ... 
] 

youclass.ts

constructor(
    @Inject(Window) private _window: Window 
) { 
    this._baseUrl = `http://${this._window.location.hostname}:3333`; 
}; 
2

मैं अपने app.component.ts में निम्न कोड के साथ हासिल की :

+०१२३५१६४१०
import { Component, OnInit, Inject, Injectable } from '@angular/core'; 
import { DOCUMENT } from '@angular/platform-browser'; 

@Component({ 
    selector: 'app-root', 
    templateUrl: './app.component.html', 
    styleUrls: ['./app.component.scss'] 
}) 
export class AppComponent implements OnInit { 

    constructor(@Inject(DOCUMENT) private document: any) { } 

    ngOnInit() { 
     this.domain = this.document.location.hostname; 
     console.log(this.domain); 
    } 
} 

यह आपके कंसोल में डोमेन नाम मुद्रित करना चाहिए।

0

मैं window.location का उपयोग करने की सलाह देता हूं क्योंकि अन्य ने कृपया कहा है।

हालांकि, आप भी तो जैसे कोणीय के सामान्य 'स्थान' पुस्तकालय के आयात और एक इंजेक्शन में यह उपयोग करके ऐसा कर सकते हैं:

import { Injectable } from '@angular/core'; 
import { Location } from '@angular/common'; 
const otherPort = 8000; 

@Injectable() 
export class ServiceOrComponentName { 
    constructor(location: Location) { 
    this.baseUrl = location._platformStrategy._platformLocation._location.protocol + 
     '//' + location._platformStrategy._platformLocation._location.hostname + 
     ':' + otherPort; 
    } 
} 
कोणीय के लिए