Как дождаться готовности внешней функции для объекта глобального окна?Javascript

Форум по Javascript
Ответить
Anonymous
 Как дождаться готовности внешней функции для объекта глобального окна?

Сообщение Anonymous »

Я загружаю внешний скрипт, который предоставляет функцию глобальному объекту window в Angular 20.
Сценарий правильно добавляется в DOM со своими свойствами (я пробовал несколько комбинаций async, defer и т. д.) из app.ts: затем я внедряю объект window в подкомпонент из document.defaultView.
Если Я пытаюсь получить доступ к самому объекту window, он работает, но всякий раз, когда я пытаюсь получить доступ к его свойству (например, window.something), он терпит неудачу: я думал, что это неправильный крючок жизненного цикла, поэтому я попытался вызвать его из каждого, но с тем же результатом.
Мне удается получить доступ к свойствам окна только, если я устанавливаю тайм-аут, независимо от того, какой крючок.
Чтобы быть четным яснее…

Код: Выделить всё

export class Foo implements Something {
myFunction() {
console.log(this.window?.bar); // fails, bar is undefined
}

ngSomething() {
this.myFunction();
}
}
… while:

Код: Выделить всё

export class Foo implements Something {
myFunction() {
setTimeout(() => {
console.log(this.window?.bar); // succeeds, bar is printed to the console
}, 1000);
}

ngSomething() {
this.myFunction();
}
}
Конечно, поскольку мне нужны некоторые значения из этого свойства (которое является объектом), я не могу использовать setTimeout: я мог бы попробовать использовать обещание, но это будет неоптимально. Э-э, я уже пробовал с async/ с тем же результатом. Только setTimeout позволяет мне получить то, что я хочу.
Мой вопрос… есть ли лучший способ доступа к объекту window в Angular 20, чтобы я мог использовать объект window.bar внутри компонента?
Сейчас я использую следующий способ:

Код: Выделить всё

import {
...
DOCUMENT,
inject
}

[...]

export class Foo implements Something {
private readonly document = inject(DOCUMENT);
private readonly window = this.document?.defaultView;
}
Здесь Something и ngSomething обозначают любую ловушку жизненного цикла — я не настолько глуп, чтобы использовать их буквально.


Подробнее здесь: https://stackoverflow.com/questions/798 ... dow-object
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»