0

我正在尝试从该网站实现 PhotoeditorSDK 的 HTML5 版本 - 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>
  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 组件中使用的最佳方法 - 我知道这是最佳实践,但最好的方法是什么?

4

1 回答 1

2

您的组件有一个 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'
  }
}
于 2018-11-13T15:20:15.137 回答