将脚本标记插入 Angular 4 HTML 组件
Insert script tag into Angular 4 HTML Component
我正在尝试从该网站实施 HTML5 版本的 PhotoeditorSDK - https://docs.photoeditorsdk.com/guides/html5/v4/introduction/getting_started
我尝试使用 Angular Github repo 来实现,但似乎 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>
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>
我正在尝试找出直接在 Angular 4 组件中使用上述 <script>
的最佳方法 - 我知道这是最佳做法,但最好的方法是什么?
您的组件有一个 ID 为 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'
}
}
我正在尝试从该网站实施 HTML5 版本的 PhotoeditorSDK - https://docs.photoeditorsdk.com/guides/html5/v4/introduction/getting_started
我尝试使用 Angular Github repo 来实现,但似乎 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>
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>
我正在尝试找出直接在 Angular 4 组件中使用上述 <script>
的最佳方法 - 我知道这是最佳做法,但最好的方法是什么?
您的组件有一个 ID 为 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'
}
}