У меня есть проект сгенерированный angular-cli
, который я хотел бы использовать с бэкэндом deployd. Deployd предоставляет скрипт для доступа к его API, который может быть загружен с http://<deployd-host>/dpd.js
. Это создает глобальный объект dpd
, который может получить доступ к API из глобального контекста javascript (например, из консоли инструментов Chrome dev).Обтекание внешнего скрипта в службе Angular2
Я хотел бы обернуть это в службе Angular2, чтобы я мог ввести макет для тестирования и т. Д. Задачами являются загрузка скрипта из URL-адреса, а затем получение доступа к глобальному объекту dpd
. Я посмотрел на this SO сообщение, но не смог получить принятый ответ на работу. Если я добавлю скрипт вручную к объекту document
, я не могу получить доступ к объекту dpd по адресу window
.
Кроме того, URL-адрес, с которого загружен сценарий, будет отличаться в зависимости от окружения, например. http://localhost:3000/dpd.js
для местного разработчика, http://dev.example.com/dpd.js
для постановки и http://www.example.com/dpd.js
для производства. Поэтому в идеале я смог бы настроить это и в сервисе.
Ищете что-то вроде ниже, чтобы работать.
@Injectable()
export class DpdService {
constructor() {
if (getEnvironmentSomeHow() == 'development') {
loadScriptFrom("http://localhost:3000/dpd.js");
} else {
loadScriptFrom("http://dev.example.com/dpd.js");
}
dpd = window.dpd;
}
public session(): Observable<Session> {
return Observable.fromPromise(dpd.sessions.get());
}
}
Вы можете поделиться некоторым кодом –
Возможный дубликат: http://stackoverflow.com/questions/39942118/how-to-inject-different-service-based-on-certain-build-environment-in-angular2/39942256 # 39942256 Очень подробное объяснение с кодом – Karl
И в чем проблема, связанная с подходом, который вы указали в вопросе? – estus