异步问题

时间:2016-01-16 15:43:05

标签: angularjs

使用案例

在我的index.html中。我有两个ng-include指令和两个自定义指令。

每个指令都有自己的src属性定义了从另一个服务器加载一些html片段的地址(自定义指令的模板属性加载了html)

在调用第五个ng-include指令(4)从另一个服务器加载java脚本之前,我需要确保所有指令(参见代码1,2,3)已完全加载了html片段。

现在所有指令都是异步运行的,我不能确定加载Javascript的指令应该始终是最后加载的指令。我需要这个,因为如果在html之前加载和执行Javascript它不会通过html并将其链接到javascript / jQuery。

我用非常经典的方式解决了这个问题。每当加载html片段时我都会更新一个全局变量,并定义一个ng-include指令,当全局变量为true表示所有其他指令都加载了他们的html时,有条件地加载Javascript。但这不是Angular方式。我需要Angular方式,顺便说一下,我是Angular的新手。

的index.html

<div ng-controller="navigationController" >

            **(1)**<agilesites-navbar></agilesites-navbar>

            <div class="container-fluid">
                <div class="row row-offcanvas row-offcanvas-right">
                    <div id="offcanvas-curtain" class="hidden-lg"></div>
                    <div id="contentContainer" class="col-sm-12 col-md-12 col-lg-12">
                       <div ui-view="content" id="content"></div>
                    </div>
                    **(2)**<agilesites-sidebar></agilesites-sidebar>
                </div>
            </div>

            **(3)**<ng-include src="''+API_HOST+'api/cms/footer'" onload="cmsResourceLoadingStatus(true)"></ng-include>
            **(4)**<ng-include src="''+API_HOST+'api/cms/javascript'"  ng-if="cmsResourceLoadingCompleted"></ng-include>
        </div>

自定义指令(agilesites-sidebar):

angular.module('newhorizonsApp')
    .directive('agilesitesSidebar', ['ProductTypes','$compile', function (ProductTypes,$compile) {
    return {
        restrict: 'E',
        scope: true,
        template: '<ng-include src="\'\'+API_HOST+\'api/cms/sidebar\'" onload="executeOnLoad();"></ng-include>',
        link: function (scope,elem){

            scope.executeOnLoad = function() {

                scope.cmsResourceLoadingStatus(true);
            };


        }
    };
}]);

0 个答案:

没有答案