最近使用jquery,echarts和postal的时候遇到一些问题,其中的一些点解决后总结记录一下:

jquery中click多次触发问题:

在使用jquery的click事件的时候遇到一个问题,点击第一次的时候触发一次click事件,当从别的页面回到此页再次点击就会触发两次click事件,第二次触发是因为在原来绑定的事件上再次绑定了一次,通常的做法是在绑定之前先解绑以确保事件不会绑定多次,如下:

$('#inMoney').unbind("click").click(function() {
	......
});

重绘echarts报错问题:

我使用的2.0版本。首先重现一下场景:

要绘制两张echarts图表,进入页面绘制第一张图,点击详情绘制第二张echarts,不报错,切换到别的页面切换回来,第一张图存在,第二张图隐藏,点击详情显示第二张图,功能正确,但是在浏览器里能看到提示报错:

Echarts Cannot read property 'modLayer' of null

在github的地址的issue里可以看到有人讨论此问题:https://github.com/ecomfe/echarts/issues/1885

分析原因应该是再次进入时第二个echarts图表所对应的echart对象已经不存在了,所以在第二次绘制时重新初始化一下应该可以解决此问题:

myChartmap = echarts.init(document.getElementById('moveMap'));

问题解决。

重新初始化解决重绘echarts报错。

宝宝开心。

使用postal.js在angualr中发布事件

主要是一个事件的发布和接受问题。在发布和接受中定义相同的频道和主题,就能在同一个频道里接受相应主题的信息。

$scope.$bus.publish({
    channel: 'chart',
    topic: 'chart.onStatistics',
    data:{}
});

$scope.$bus.subscribe({
    channel: 'chart',
    topic: 'chart.onStatistics',
    callback: function(data) {
        var name = data.name;
        $scope.vm.visible = false;
        $scope.vm.minimizedBarVisible = false;
        $scope.$bus.publish({
            channel: "statisticsEntity",
            topic: "statisticsEntity.close",
            data: {}
        });
        }
    }
});

从中可以看到发布的时候可以传data数据,接受到信息以后在callback里进行接受到信息以后的回调函数。

而且从上面的一个例子可以看到postal的一个弊端,就是这儿发布一个事件一那儿发布一个事件,这样有些乱,有时候都不知道有没有在别的地方发布或接受某些事件。

确实这是以前的做法,发布事件来处理后续操作,其实主流来说应该使用路由来控制不同状态。