在DOM - AngularJS中等待指令完成加载
Listen for directive to have completed loading in DOM - AngularJS
我想提供一个加载指示,只要指令还没有完成加载页面上的所有子元素。
我的应用程序的这一部分有标签,当点击将加载标签内容。我的问题是,一些选项卡的内容需要很长时间来渲染。
我以为是我的HTTP请求导致了渲染的延迟,并求助于使用自定义承诺,但在实现之后,我发现实际上是指令的DOM渲染花了这么长时间。
如果我想在此指令内呈现所有内容之前显示加载指示器,那么在指令中收听的正确事件是什么?据我所知,$viewContentLoaded
只用于ngView
指令,但这个指令是ngView的子指令,所以它不适用(我认为)。
代码非常基本:
控制器:
angular.module('app', [])
.controller('MyController', ['$scope', 'Service', function($scope, Service) {
$scope.get_data = function(user) {
Service.getsomething(user).then(function(response) {
$scope.data = response.data;
},
function(error) {
console.log(error);
});
};
}])
.directive('tab', function() {
return {
restrict: 'E',
templateUrl: 'templates/tab.html'
};
})
HTML:
<div role="tabpanel">
<ul class="nav nav-pills col-lg-9 col-lg-offset-3" role="tablist">
<li toggle-tabs class="active">
<a href="#apanel">Panel</a>
</li>
</ul>
<div class="tab-content col-lg-12">
<tab></tab> //within here there are many forms
</div>
</div>
angular.module('app').directive('tab', function($timeout, $rootScope) {
return {
restrict: 'E',
templateUrl: 'templates/tab.html',
link: function (scope, element, attrs, ctrl) {
$timeout(function () {
$rootScope.$emit('directive-dom-is-most-likely-there');
});
}
};
});
当link
运行时,你不能确定DOM在那里,它取决于嵌套指令的实现(例如,ng-repeat
已知是一个晚开者)。要么你不能确定他们都没有异步的东西,需要一些时间来完成,但$timeout
与零延迟是ok的化妆品的东西。
这取决于上下文,当你可以用require
与父指令交谈时,没有必要污染$rootScope
。
相关文章:
- 指令加载真的很长,检查加载时间的方法
- AngularJs|Don'在成功加载所有指令htmls之前,不显示页面
- 由于$compile,Javascript(Angular)嵌套指令加载了两次
- 在Angular JS中POST后重新加载指令方法
- 如何在控制器中加载指令
- 在指令内加载后访问子元素图像
- 在指令之后加载的角度ng-init函数
- 在window.print()中加载为循环指令而编译时准备DOM失败
- 在ui路由器中以Webpack块的形式懒惰地加载Angular指令
- 创建自定义指令时未加载templateUrl
- AngularJS没有't解析指令中动态加载的数据
- 在ng视图加载或指令加载后运行javascript
- Highcharts数据将不会使用角度指令加载
- 如何使用自定义角度指令加载脚本
- 角度指令加载顺序
- 角度指令加载顺序
- 从另一个指令加载一个指令
- Angularjs | ng-message在使用$compile从指令加载html时不显示错误信息
- 在第二次加载视图时,用Angular指令加载部分而不渲染
- Angular JS-点击按钮,从指令加载一个模板html