当前位置:网站首页 > Haskell函数式编程 > 正文

箭头函数改变定时器中的this指向

此时viewer下的方法可以正常调用

mounted() { var viewer = new Cesium.Viewer('cesiumContainer'); var czml1 = [{ "id" : "document", "name" : "CZML Point - Time Dynamic", "version" : "1.0", "clock": { "interval": "2012-08-04T16:00:00Z/2012-08-04T18:00:00Z", "currentTime": "2012-08-04T16:00:00Z", "multiplier": 10 }, }, { "id" : "point", "availability" :"2012-08-04T16:00:00Z/2012-08-04T16:05:00Z", "position" : { "epoch" : "2012-08-04T16:00:00Z", "cartographicDegrees" : [ 0.0, 118.005, 30.004, 0.0, 10.0, 118.007, 30.003, 0.0, 20.0, 118.01, 30.0047, 0.0, 30.0, 118.009, 30.0077, 0.0, 40.0, 118.01, 30.005, 0.0, 50.0, 118.003, 30.0073, 0.0, 60.0, 118.005, 30.0037, 0.0 ] }, "point" : { "color" : { "rgba" : [255, 255, 255, 128] }, "outlineColor" : { "rgba" : [255, 0, 0, 128] }, "outlineWidth" : 3, "pixelSize" : 15 } }]; var dataSourcePromise; var i = 30.; var j = 30.; var a = 60; setInterval(function() { i += 0.0001; j -= 0.0001; a += 10; czml1[1].position.cartographicDegrees.push(a, 118., i, 0); //路径最后添加节点 czml1[0].clock.currentTime = viewer.clock.currentTime.toString(); //获取当前时间 修改当前时间 viewer.entities.removeAll(); //清空之前数据 避免数据堆积 viewer.dataSources.add(Cesium.CzmlDataSource.load(czml1)); //重新添加修改后的数据 }, 1000); dataSourcePromise = Cesium.CzmlDataSource.load(czml1); viewer.dataSources.add(dataSourcePromise); viewer.zoomTo(dataSourcePromise); },

在data中定义viewer后 setInterval中报错 this.viewer is undefined 这是因为定时器中的this指向了Window 但应该指向vue的实例

data() { return { viewer:"", color: 'rgba(03,194,58, 128)', color1: [103,194,58, 128], } }, setInterval(function() { i += 0.0001; j -= 0.0001; a += 10; czml1[1].position.cartographicDegrees.push(a, 118., i, 0); //路径最后添加节点 czml1[0].clock.currentTime = this.viewer.clock.currentTime.toString(); //获取当前时间 修改当前时间 this.viewer.entities.removeAll(); //清空之前数据 避免数据堆积 this.viewer.dataSources.add(Cesium.CzmlDataSource.load(czml1)); //重新添加修改后的数据 }, 1000);

 vue中使用定时器时this指向

使用setInterval时this指向的问题。如果我们直接this.timer = setInterval(function(){要触发的函数}) 是会报错的。因为这样的话this的指向为window,但是我们要触发的函数是挂载在vm实例上面的。所以这个时候就是箭头函数发挥用处的时候了。我们可以直接这样写this.timer = setInterval(() => {要触发的函数}).

setInterval(() => { i += 0.0001; j -= 0.0001; a += 10; czml1[1].position.cartographicDegrees.push(a, 118., i, 0); //路径最后添加节点 czml1[0].clock.currentTime = this.viewer.clock.currentTime.toString(); //获取当前时间 修改当前时间 this.viewer.entities.removeAll(); //清空之前数据 避免数据堆积 this.viewer.dataSources.add(Cesium.CzmlDataSource.load(czml1)); //重新添加修改后的数据 }, 1000);

 

到此这篇箭头函数改变定时器中的this指向的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • ElementUI 限制上传文件格式为dll .DLL .xml .XML2024-12-03 12:09:06
  • ElementUI dialog弹出层样式优化2024-12-03 12:09:06
  • ElementUI统一修改滚动条样式2024-12-03 12:09:06
  • Vue-Axios请求传参格式2024-12-03 12:09:06
  • 在子组件中动态给父组件添加样式2024-12-03 12:09:06
  • 485报文解析公式(485报文怎么抓取)2024-12-03 12:09:06
  • icmp报文格式ping请求(icmp报文格式分析)2024-12-03 12:09:06
  • lead函数用法(lead lag函数)2024-12-03 12:09:06
  • max函数调用(如何调用max函数)2024-12-03 12:09:06
  • 需要使用安全选项卡win7(windows要使用安全模式启动,需在启动时按)2024-12-03 12:09:06
  • 全屏图片