前端sdk引用问题

本部分内容主要包括引入前端 sdk 的 js 文件时常见的问题。结合客户的具体使用场景,前端 sdk 的使用可分为以下两个部分:1.非组件内使用;2.组件内使用;

以下是具体说明:

# 一、非组件内使用

如无特殊需求,建议在 index.html 中按如下顺序引入 sdk 文件,请确保 ZwInit 方法传入的 dom 元素是正确的(id 名或类名不作限制),此元素将作为 sdk 的容器。

<body>
  <script type="text/javascript" src="/assets/ZwCloud2DSDK/ZwCloud2D.js"></script>
  <script type="text/javascript" src="/assets/ZwCloud2DSDK/ZwCloud2DPrivateAPI.js"></script>

  <div id="container"></div>

  <script>
        //设置后端服务地址
        ZwCloud2D.ZwDataProcessor.ZwSetConnectUrl('http://192.168.56.176:8888');

        //使用Cloud2D公网服务时,需要设置请求token
        //ZwCloud2D.ZwDataProcessor.ZwSetConnectUrl('https://test2d.zwsoft.cn');
        //ZwCloud2D.ZwDataProcessor.ZwSetToken('');

        //设置加载图纸的docId
        ZwCloud2D.ZwDataProcessor.ZwSetLoadDwg('1606196943661817856');

        let container = document.getElementById('container');

        //初始化前端组件
        ZwCloud2D.ZwEditor.ZwInit(container);

        //加载图纸
        ZwCloud2D.ZwDataProcessor.ZwLoad();
   </script>
</body>

常见问题:

1.如遇编译报错类似 Module is not defined,Module、ZwCloud2D 均为挂载到 window 上的全局对象,在对应的对象前添加 window 即可解决,如 window.Module、window.Zwcloud2D 等;

2.如遇报错 unexpected token '<',请检查 js 文件引用路径是否正确。如引用路径错误,对于请求会返回 index.html 中的内容,可据此判断;

# 二、组件内使用

通常情况下,我们推荐在 index.html 中引用 js 文件,在组件中执行初始化方法,如下所示,如需在 js 代码中动态引入 sdk,请直接查看本节第 4 部分内容

<body id="wholeFrame">
  <div id="app"></div>
  <script type="text/javascript" src="/assets/ZwCloud2DSDK/ZwCloud2D.js"></script>
  <script type="text/javascript" src="/assets/ZwCloud2DSDK/ZwCloud2DPrivateAPI.js"></script>
</body>

根据前端主流框架的划分,以下主要包括四部分内容:1.基于 vue 框架的使用说明;2.基于 angular 框架的使用说明;3.基于 react 框架的使用说明;4.补充说明。

# 1.基于 vue 框架的使用说明

vue 框架需要在 mouted 生命周期执行初始化方法,请确保 ZwInit 方法传入的 dom 元素是正确的(id 名或类名不作限制),此元素将作为 sdk 的容器。

<template>
    <div id="container"></div>
</template>

<script>

export default {
    name: "cloud2d",

    data() {
        return {};
    },
    props: [],

    components: {

    },

    mounted() {
        //设置后端服务地址
        ZwCloud2D.ZwDataProcessor.ZwSetConnectUrl('http://192.168.56.176:8888');

        //使用Cloud2D公网服务时,需要设置请求token
        //ZwCloud2D.ZwDataProcessor.ZwSetConnectUrl('https://test2d.zwsoft.cn');
        //ZwCloud2D.ZwDataProcessor.ZwSetToken('');

        //设置加载图纸的docId
        ZwCloud2D.ZwDataProcessor.ZwSetLoadDwg('1606196943661817856');

        let container = document.getElementById('container');

        //初始化前端组件
        ZwCloud2D.ZwEditor.ZwInit(container);

        //加载图纸
        ZwCloud2D.ZwDataProcessor.ZwLoad();
    },

    methods: {

    }
}
</script>
<style lang="scss" scoped>

</style>
<style>
#container {
    width: 100vw;
    height: 100vh;
}
</style>

# 2.基于 angular 框架的使用说明

angular 框架需要在 ngOnInit 生命周期执行初始化方法,请确保 ZwInit 方法传入的 dom 元素是正确的(id 名或类名不作限制),此元素将作为 sdk 的容器。

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-dwg-editor',
  templateUrl: './dwg-editor.component.html',
  styleUrls: ['./dwg-editor.component.scss']
})
export class DwgEditorComponent implements OnInit {
  constructor() {
  }
  ngOnInit(): void {
        //设置后端服务地址
        ZwCloud2D.ZwDataProcessor.ZwSetConnectUrl('http://192.168.56.176:8888');

        //使用Cloud2D公网服务时,需要设置请求token
        //ZwCloud2D.ZwDataProcessor.ZwSetConnectUrl('https://test2d.zwsoft.cn');
        //ZwCloud2D.ZwDataProcessor.ZwSetToken('');

        //设置加载图纸的docId
        ZwCloud2D.ZwDataProcessor.ZwSetLoadDwg('1606196943661817856');

        let container = document.getElementById('container');

        //初始化前端组件
        ZwCloud2D.ZwEditor.ZwInit(container);

        //加载图纸
        ZwCloud2D.ZwDataProcessor.ZwLoad();
  }
}

# 3.基于 react 框架的使用说明

react 框架需要在 componentDidMount 生命周期执行初始化方法,请确保 ZwInit 方法传入的 dom 元素是正确的(id 名或类名不作限制),此元素将作为 sdk 的容器。


import React from "react";
import PropTypes from "prop-types";
import "./Display.css";
export default class Display extends React.Component {
  static propTypes = {
    value: PropTypes.string,
  };

  render() {
    return (
      <div id="test">
      </div>
    );
  }

  componentDidMount() {
        //设置后端服务地址
        ZwCloud2D.ZwDataProcessor.ZwSetConnectUrl('http://192.168.56.176:8888');

        //使用Cloud2D公网服务时,需要设置请求token
        //ZwCloud2D.ZwDataProcessor.ZwSetConnectUrl('https://test2d.zwsoft.cn');
        //ZwCloud2D.ZwDataProcessor.ZwSetToken('');

        //设置加载图纸的docId
        ZwCloud2D.ZwDataProcessor.ZwSetLoadDwg('1606196943661817856');

        let container = document.getElementById('container');

        //初始化前端组件
        ZwCloud2D.ZwEditor.ZwInit(container);

        //加载图纸
        ZwCloud2D.ZwDataProcessor.ZwLoad();
  }
}

# 4.补充说明

本节内容适用于需在 js 代码中动态引入 sdk 的场景,在各个前端框架对应的生命周期时执行相关代码即可,如 vue 的 mouted、angular 的 ngOnInit 和 react 的 componentDidMount,注意,请务必按照如下所示的引用顺序,否则可能会引发某些时序问题。以下为基于 react 框架的例子。

import React from "react";
import PropTypes from "prop-types";
import "./Display.css";
export default class Display extends React.Component {
    static propTypes = {
        value: PropTypes.string,
    };

    render() {
        return (
            <div id="container">
            </div>
        );
    }

    componentDidMount() {
        var oHead = document.getElementsByTagName('head')[0];

        var oScript1 = document.createElement("script");
        oScript1.type = "text/javascript";
        oScript1.src = "assets/ZwCloud2DSDK/ZwCloud2D.js";

        var oScript2 = document.createElement("script");
        oScript2.type = "text/javascript";
        oScript2.src = "assets/ZwCloud2DSDK/ZwCloud2DPrivateAPI.js";

        oHead.appendChild(oScript1);
        oScript1.onload = () => {

            oHead.appendChild(oScript2);
            oScript2.onload = () => {

                //设置后端服务地址
                ZwCloud2D.ZwDataProcessor.ZwSetConnectUrl('http://192.168.56.176:8888');

                //使用Cloud2D公网服务时,需要设置请求token
                //ZwCloud2D.ZwDataProcessor.ZwSetConnectUrl('https://test2d.zwsoft.cn');
                //ZwCloud2D.ZwDataProcessor.ZwSetToken('');

                //设置加载图纸的docId
                ZwCloud2D.ZwDataProcessor.ZwSetLoadDwg('1606196943661817856');

                let container = document.getElementById('container');

                //初始化前端组件
                ZwCloud2D.ZwEditor.ZwInit(container);

                //加载图纸
                ZwCloud2D.ZwDataProcessor.ZwLoad();
            }
        }
    }
}