vue中态势推演Cannot set property 'xx' of null

0 投票

vue中态势推演,初始化地图为三维模型,点击态势推演按钮后v-if由false变为true,对地图进行destory(),点击创建动画,可以成功,这时候,播放、暂停等功能正常。然后再点击隐藏态势后,v-if变为false。再想进行第二次观看效果----即点击态势显示,这时候点击创建动画后,会报Uncaught (in promise) TypeError: Cannot set property 'startTime' of null错误请问老师这是为什么,既然第一次可以成功,那么第二次为什么会出现错误。

var geoJGSZ = null;
                var geoTFXS = null;
                var geoLJXS = null;
                var geoTFXS2 = null;
                var geoZYSS = null;
                var geoLJZY = null;
                var geoZYSS2 = null;
                var geoJC = null;
                var geoSJ = null;
                var geoLJJL = null;
                var geoJGJL = null;

                var pointsJGSZ = [];
                pointsJGSZ[0] = new Cesium.PlotPoint3D(13.0486416724835, 47.827217402435, 0);
                pointsJGSZ[1] = new Cesium.PlotPoint3D(13.0484530291208, 47.8273069046719, 0);
                pointsJGSZ[2] = new Cesium.PlotPoint3D(13.0498576145008, 47.8282734633643, 0);
                pointsJGSZ[3] = new Cesium.PlotPoint3D(13.0513393769035, 47.8287206684327, 0);
                pointsJGSZ = this.MoveSymbol(pointsJGSZ);
                window.console.log("111--"+this.plottingLayer)
                window.console.log("111--"+this.animationManager)
                this.plottingLayer.createSymbol(22, 1004, pointsJGSZ, (even) =>{
                    geoJGSZ = even.feature;
                    var goAnimationJGSZ = this.animationManager.createGOAnimation(Cesium.GOAnimationType.ANIMATION_GROW, "JGSZ", geoJGSZ);//进攻警力生长动画
                    goAnimationJGSZ.startTime = 0;//动画开始时间
                    goAnimationJGSZ.duration = 5;//动画播放时长

                });

                var pointsTFXS = [];
                pointsTFXS[0] = new Cesium.PlotPoint3D(13.0523705219875, 47.828610443775, 0);
                pointsTFXS[1] = new Cesium.PlotPoint3D(13.0528881926318, 47.8282317961645, 0);
                pointsTFXS = this.MoveSymbol(pointsTFXS);
                this.plottingLayer.createSymbol(22, 1003, pointsTFXS,(even) =>{
                    geoTFXS = even.feature;
                    geoTFXS.symbolStyle.lineColor = {red: 1, green: 1, blue: 0, alpha: 1};//"#ffff00"
                    var goAnimationTFXS = this.animationManager.createGOAnimation(Cesium.GOAnimationType.ANIMATION_SHOW, "TFXS1", geoTFXS);//逃犯显隐动画
                    goAnimationTFXS.showEffect = false;//是否有显隐特效
                    goAnimationTFXS.finalDisplay = true; //最终显示状态,默认不显示
                    goAnimationTFXS.startTime = 0;
                    goAnimationTFXS.duration = 6;

                    var goAnimationTFXS1 = this.animationManager.createGOAnimation(Cesium.GOAnimationType.ANIMATION_GROW, "TFSZ1", geoTFXS);//逃犯生长动画
                    goAnimationTFXS1.startTime = 5;
                    goAnimationTFXS1.duration = 6;
                    goAnimationTFXS1.startScale = 1;//生长动画开始比例
                    goAnimationTFXS1.endScale = 0;//生长动画结束比例
                });

之前出现animationManager  undefined的原因是因为异步加载机制

7月 20, 2020 分类:  297次浏览 | 用户: Zzy 才疏学浅 (19 分)
修改于 7月 20, 2020 用户:Zzy

1个回答

0 投票
您好,态势推演只能创建一次,想要控制态势推演显示隐藏可以通过设置PlottingLayer.visibility =true/false来实现。
7月 23, 2020 用户: 卷饼先生 名扬四海 (2,152 分)
修改于 7月 23, 2020 用户:卷饼先生
我整个思路是:

1.打开页面,初始化创建三维CBD  viewer(控制台无报错)
2.点击页面中按钮(用于控制态势推演的显示和隐藏),先把CBD的viewer用destory()方法摧毁掉。再重新创建态势推演的viewer。(控制台无报错)
3.点击态势推演页面中创建动画按钮,成功创建动画,这时候,播放、暂停、停止等按钮事件正常。(控制台无报错)
4.想把态势场景隐藏,即点击按钮,把态势的viewer摧毁,再重新创建CBD的viewer。(控制台无报错)
5.又想查看态势场景,即再次点击按钮,把CBD的viewer给destory,创建态势推演的viewer。(控制台无报错)
6.点击创建动画按钮,这时候会出现Cannot set property 'xx' of null报错,播放、暂停、停止等按钮事件都失效(控制台会出现报错)

再创建态势viewer的时候都会进行态势推演的初始化方法InitPlot(官方示例中),并且把plottingLayer,animationManager也重新赋值给了全局变量。只部分代码一直没报错
那您在从CBD场景返回态势场景的时候执行以下删除所有动画操作,再重新创建动画(每次返回态势场景的时候有且只创建一次),function deleteAllAnimation() {
            if (0 === animationManager._goAnimations.length) {
                return;
            }
            animationManager.reset();
            animationManager.removeAllGOAnimation();
            //animationManager.removeGOAnimation()
        }

这时再执行播放等操作。我这边进行上述操作时控制台未出现报错情况,且播放等按钮功能正常。
执行这个方法会出现Error in v-on handler: "TypeError: Cannot read property 'length' of null",这个上面说过了
或者老师,我把这用qq压缩发给您,帮忙看一下。我好像有您的qq:3442484410,感觉说也说不清楚。
QQ联系您
...