импортировать самовыполняющуюся функцию в другой класс в машинописном тексте

Я делаю гибридное приложение AngularJS/Angular5. Поэтому я пытаюсь шаг за шагом изменить свои файлы JavaScript на Typescript. У меня был файл javascript:

(function () {
    'use strict';

    var domainPath = "http://localhost:26264/";
    var reportAPI = "http://localhost:58629/";
    var onlineHelpURL = "http://localhost:8085/";
    var hh6ServiceUrl = "https://localhost:40100/";

    var sysSettings = {
        webServiceURL: domainPath,
        hh6ServiceUrl: hh6ServiceUrl,
        reportServiceURL: reportAPI,
        onlineHelpURL: onlineHelpURL
    };

    angular.module('app.sysSettings', []).constant("sysSettings", sysSettings);
})();  

и я изменил его в машинописном тексте, чтобы иметь возможность экспортировать его и повторно использовать настройки в моих машинописных файлах:

declare var angular: any;

let sysSettingsts = (function () {
    'use strict';
    var domainPath = "http://localhost:26264/";
    var reportAPI = "http://localhost:58629/";
    var onlineHelpURL = "http://localhost:8085/";
    var hh6ServiceUrl = "http://localhost:40100/";
    var sysSettings: any = {
        webServiceURL: domainPath,
        hh6ServiceUrl: hh6ServiceUrl,
        reportServiceURL: reportAPI,
        onlineHelpURL: onlineHelpURL
    };

    angular.module('app.sysSettings', []).constant("sysSettings", sysSettings);

    return sysSettings;
})();

export default sysSettingsts;

Но когда я пытаюсь импортировать этот файл:

import { Injectable } from '@angular/core';
import { TranslateLoader } from '@ngx-translate/core';
import { Observable } from 'rxjs/Observable';
import {HttpClient} from "@angular/common/http";
import {sysSettingsts} from "angular/sysSettings";

@Injectable()
export class CustomTranslateLoader implements TranslateLoader  {

  constructor(private http: HttpClient,
              private item: sysSettingsts) {
    this.item = item;
  }

  getTranslation(lang: string): Observable<any>{

var apiAddress = this.item.domainPath + "api/GlobalResources/?lang=" + lang;
return Observable.create(observer => {
  this.http.get(apiAddress, ).subscribe(res => {
      observer.next(res);
      observer.complete();
    },
    error => {
      console.log("cannot retrieve Global Resources");
    }
  );
});

}

Я могу видеть только значения в import {sysSettingsts} from "angular/sysSettings"; файл, но конструктор инсайтов my sysSettingsts не определен.

  constructor(private http: HttpClient,
              private item: sysSettingsts) {
    this.item = item;
  }

Я пытался использовать sysSettingsts непосредственно внутри метода, но значение тоже не определено... Может ли кто-нибудь дать мне понять, как я могу экспортировать выполнение функции в машинописном тексте или, по крайней мере, дать некоторое представление о том, как я могу импортировать настройки из моего машинописного файла в другие файлы машинописного текста (сделать настройки многоразовыми).

Спасибо


person Andrei    schedule 10.09.2018    source источник
comment
Если вы используете модульную систему, вам больше не нужен IIFE. Просто поместите код, создающий ваш объект, прямо в файл.   -  person Bergi    schedule 11.09.2018


Ответы (2)


Измените синтаксис экспорта или импорта. Сейчас они не совпадают.

При использовании экспорта по умолчанию:

export default sysSettingsts;

Соответствующий синтаксис импорта:

import sysSettingsts from "angular/sysSettings"

Обратите внимание на отсутствие брекетов.


Или, если вы хотите сохранить тот же синтаксис импорта, вместо этого используйте обычный экспорт (не по умолчанию):

export { sysSettingsts }

Подробнее о шаблоне импорта/экспорта можно прочитать здесь< /а>.

person CRice    schedule 10.09.2018
comment
export { sysSettingsts } такое же, как export { sysSettingsts: sysSettingsts }, верно? - person ibrahim mahrir; 11.09.2018
comment
Нет. Хотя именованный экспорт обманчиво выглядит так, как будто вы экспортируете литерал объекта, используя сокращенные имена свойств, это не то, что он делает. export { sysSettingsts: sysSettingsts } будет синтаксической ошибкой. Вы можете экспортировать литералы объектов таким образом, но вам придется либо дать им имя (export const somename = { ... }), либо использовать для него экспорт по умолчанию (export default { ... }). - person CRice; 11.09.2018

Файл, который вы хотите изменить, ничего не экспортирует, назначение этого файла — его побочный эффект (он изменяет внешний объект angular). Вы не хотите ничего делать с возвращаемым значением из файла, вы просто хотите, чтобы его код выполнялся.

Затем просто import 'your-file.ts'; и удалите окружающие самовыполняющиеся функции

person Guerric P    schedule 10.09.2018