angular先加载页面在执行事件,使用echarts渲染页面

剧情重现:

在一个页面中有多个小模块,这几个模块是可以拖动调顺序的,并且其中有两个模块使用了echarts渲染,

调整顺序angular插件有成熟的解决方案angular-sortable,https://github.com/angular-ui/ui-sortable

1)首先定义一个页面模板数组

$scope.tplList=[
   {str:‘msgRemind‘,mark:‘msgreMind‘,tpl:‘html的路径‘},
   {str:‘newDeal‘,mark:‘newDeal‘,tpl:‘html的路径‘} ........................
];

2)使用ng-repeat配合ng-include动态渲染页面

<ul ui-sortable=‘‘ ng-model="tplList" class="list-inline">
    <li ng-repeat="item in tplList">
       <div ng-include="item.tpl"></div>
    </li>
</ul>  

如果你这样写,浏览器也确实可以循环出,并编译出你的模块,但是问题是我之前说的是有两个模块是echarts渲染的(使用id做标识),

那么问题就来了,问题就是使用echart的时候,js的执行可能快与页面渲染的速度,你的标识id没能被js找到,

页面渲染与js执行的先后执行问题,

使用过jq的猿类,可能会说$(function(){  ......  })可以解决,我不做任何解释,你去试试把,我看不好使。

那我们在不使用jq的情况下,该怎么来呢??

$emit,$on配合指令监听很不错

直接堆代码了:

//首先需要定义一个directive  

    directives.directive(‘onFinishRender‘, function ($timeout) {
        return {
            restrict: ‘A‘,
            link: function(scope, element, attr) {
                if (scope.$last === true) {  //表明最后一个页面渲染出了
                    $timeout(function() {
                        scope.$emit(‘ngRepeatFinished‘);
                    });
                }
            }
        };
    }); 

重新来过

<ul ui-sortable=‘‘ ng-model="tplList" class="list-inline" >
    <li ng-repeat="item in tplList"   on-finish-render>
       <div ng-include="item.tpl"></div>
    </li>
</ul>  

ctrl中进行监听

$scope.$on(‘ngRepeatFinished‘,function(){  $scope.setCharts();//执行echarts的绘制函数   $scope.setPatCharts();//执行echas的绘制函数});
时间: 2024-10-29 19:08:08

angular先加载页面在执行事件,使用echarts渲染页面的相关文章

图片加载完后执行事件

var count=0; $append_items.find('img').on('load',function(){ count++; if(count == $append_items.length){ $masonry_box.append($append_items).masonry('appended',$append_items); } });

Javascript在页面加载时的执行顺序【转】

一.在HTML中嵌入Javasript的方法 直接在Javascript代码放在标记对<script>和</script>之间 由<script />标记的src属性制定外部的js文件 放在事件处理程序中,比如:<p onclick="alert('我是由onclick事件执行的Javascript')">点击我</p> 作为URL的主体,这个URL使用特殊的Javascript:协议,比如:<a href="

js中页面加载完成后执行的几种方式及执行顺序

在js和jquery使用中,经常使用到页面加载完成后执行某一方法.通过整理,大概是五种方式(其中有的只是书写方式不一样). 1:使用jQuery的$(function){}; 2:使用jquery的$(document).ready(function(){});前两者本质上没有区别,第1种是第2种的简写方式.两个是document加载完成后就执行方法. 3:使用jQuery的$(window).load(function(){}); 4:使用window.onload = function(){

jquery加载页面的方法(页面加载完成就执行)

jquery加载页面的方法(页面加载完成就执行) jquery加载页面的方法(页面加载完成就执行),建议大家看下windows.onload与$(document).ready之间的区别. 1.$(function(){  $("#a").click(function(){  //adding your code here  }); }); 2.$(document).ready(function(){  $("#a").click(function(){  //a

[转]jquery加载页面的方法(页面加载完成就执行)

jquery加载页面的方法(页面加载完成就执行),建议大家看下windows.onload与$(document).ready之间的区别. 1.$(function(){ $("#a").click(function(){ //adding your code here }); }); 2.$(document).ready(function(){ $("#a").click(function(){ //adding your code here }); }); 3

页面加载完就执行的设置?

在JS中,如果希望在页面加载完成后执行某些操作的话,一般的写法如下: window.onload = function(){// some thing to do}; 但 是,onload函数的执行并不是我们通常所理解的浏览器构建完html页面对应的DOM树后立刻执行,而是要等到页面中所引用的图片等外部资源 完全下载完成后并且在浏览器中显示才执行,也就是说,如果页面中包括很多图片或者图片很大时将导致onload函数执行时间会被推迟很久,页面中基于 onload的特效或者其它相关内容将并不立刻可用

jquery.ready可以在文档加载后尽快执行对文档的操作

jquery 1.12.4中ready的关键代码 1 jQuery.ready.promise = function( obj ) { 2 if ( !readyList ) { 3 4 readyList = jQuery.Deferred(); 5 6 // Catch cases where $(document).ready() is called 7 // after the browser event has already occurred. 8 // Support: IE6-1

JS/CSS/IMG加载顺序关系之DOMContentLoaded事件

DOMContentLoaded介绍 DOMContentLoaded事件的触发条件是: 将会在"所有的DOM全部加载完毕并且JS加载执行后触发". 但如果"js是通过动态加载进来的话,是不会影响到DOMContentLoaded的触发时间" 如下图所示,蓝色的线代表DOMContentLoaded开始触发,但前提是JS已经加载完毕并执行了. (仅仅是DOM 并不是onload事件整个页面全部加载完毕触发,DOMContentLoaded比onload要早触发 请区

angular懒加载的一些坑

写在前面 最近在工作中接触到angular模块化打包加载的一些内容,感觉中间踩了一些坑,在此标记一下. 项目背景: 项目主要用到angularJs作为前端框架,项目之前发布的时候会把所有的前端脚本打包压缩到一个文件中,在页面初次访问的时候加载,造成页面初始载入缓慢,在此基础上,提出按需加载,即只有当用户访问某个模块的时候,该模块的脚本才会加载. 工具类: 项目使用grunt打包根据AMD规范,使用grunt-contrib-requirejs来压缩合并模块,同时用ocLazyLoad来完成ang

ExtJS中关于分页加载数据后执行一个回调函数的问题

前几天,一个项目中有用到ExtJS.之前修改的时候,只是在Store Load的时候执行一个回调,这个会导致翻页的时候,没有执行这个回调,而这个回调做的恰好是一些数据的格式验证不可或缺的. 被这个问题困扰了很久,也查了很多的关于ExtJs Store的应用和API,最终找到了一个解决的办法,其实很简单,就是在Store里面添加一个load事件的监听. new Ext.data.Store({... listeners: { "load": function (store, operat