Вставьте тег сценария в HTML-компонент Angular 4
Я пытаюсь реализовать HTML5-версию PhotoeditorSDK с этого сайта - https://docs.photoeditorsdk.com/guides/html5/v4/introduction/getting_started
Я пытался реализовать с помощью репозитория Angular Github, но казалось бы, что package.json иллюстрирует, что это работает только для Angular 5 и 6, и наше приложение в настоящее время немного устарело, так как Angular 4.x (и мы не можем в настоящее время обновиться до 5)
Использование метода HTML5 довольно просто в простом приложении, но в Angular 4 это кажется сложным, так как из-за ограничений Angular я не могу использовать <script>
теги внутри компонента.
В указателе <head>
Я добавил следующее:
<head>
<!-- React Dependencies for the SDK UI -->
<script src="js/vendor/react.production.min.js"></script>
<script src="js/vendor/react-dom.production.min.js"></script>
<!-- PhotoEditor SDK-->
<script src="js/PhotoEditorSDK.min.js"></script>
<!-- PhotoEditor SDK UI -->
<script src="js/PhotoEditorSDK.UI.DesktopUI.min.js"></script>
<link rel="stylesheet" href="css/PhotoEditorSDK.UI.DesktopUI.min.css"/>
</head>
В самом шаблоне есть простой <div>
следующее:
<div id="editor" style="width: 100vw; height: 100vh;"></div>
Сам тег script выглядит следующим образом - и в основном прикрепляет изображение, которое будет отображаться в редакторе для редактирования и т. Д.
<script>
window.onload = function () {
var image = new Image()
image.onload = function () {
var container = document.getElementById('editor')
var editor = new PhotoEditorSDK.UI.DesktopUI({
container: container,
// Please replace this with your license: https://www.photoeditorsdk.com/dashboard/subscriptions
license: '{"owner":"Imgly Inc.","version":"2.1", ...}',
editor: {
image: image
},
assets: {
// This should be the absolute path to your `assets` directory
baseUrl: '/assets'
}
})
}
image.src = './example.jpg'
}
</script>
Я пытаюсь найти лучший способ использования <script>
выше непосредственно в Angular 4 Component - я знаю, что это лучшая практика, но каков наилучший способ сделать это?
1 ответ
Ваш компонент имеет элемент с идентификатором editor
, Это будет доступно только в ngAfterViewInit
крючок компонента. Как только это называется, window.onload
был назван давным-давно. Также когда onload
называется, элемент еще не существует, так что это также плохая идея, чтобы поместить его туда.
Лучше всего будет вызвать метод изнутри ngAfterViewInit
вашего компонента, и используйте @ViewChild
аннотация:
declare const PhotoEditorSDK: any;
@Component({
template: `<div style="width: 100vw; height: 100vh;" #editor></div>`
})
export class EditorComponent implements AfterViewInit {
@ViewChild('editor') editor: ElementRef<HTMLElement>;
ngAfterViewInit(): void {
const image = new Image();
image.addEventListener('load', () => {
const editor = new PhotoEditorSDK.UI.DesktopUI({
container: this.editor.nativeElement,
license: '{"owner":"Imgly Inc.","version":"2.1", ...}',
editor: {
image
},
assets: {
baseUrl: '/assets'
}
});
});
image.src = './example.jpg'
}
}