指令,如何检测它是否已完全呈现
directives, how to detect if it's fully rendered
所以我有一个指令:
APP.directive('projectsStrip', function(){
return {
restrict: 'E',
controller: 'ProjectCtrl',
templateUrl: 'views/projects/projects.strip.html',
link: function link($scope, elem, attrs) {
$scope.$on('slides-ready', resizeStrip.bind(null, elem));
}
}
});
var resizeStrip = function(elem, ev, data){
debugger;
};
和模板:
<div id="main" class="site-main">
<div id="main-content" class="main-content">
<div ng-repeat="slide in project.slides" class="post type-post status-publish format-standard has-post-thumbnail hentry category-portfolio category-work tag-art tag-minimal tag-modern" style="width: 592px;">
<img src="{{slide.url}}" alt="{{slide.title}}">
<label>{{slide.label}}</label>
<div>
</div>
</div>
控制器加载来自另一个控制器的项目:
app.controller('ProjectCtrl', function($scope, $http){
$scope.project = {};
$scope.$on('project-selected', function(ev, project){
$scope.project = project;
$scope.$root.$broadcast('slides-ready');
});
});
问题是,在指令中,当函数 resizeStrip 运行时,html 中仍然没有呈现的幻灯片,所以当我运行elem.find('img')
时,我得到[]
.
点击幻灯片(<div ng-repeat="slide in project.slides" ...>
)渲染的正确方法是什么?
当你广播slides-ready
时,ngRepeat
指令仍然不知道project
已经改变。更改尚未消化,因此不会呈现任何内容。您可以将广播包装成$timeout
呼叫。
但即便如此,您可能也想等到加载图像。如果是这样,则必须将onLoad
事件处理程序附加到img
元素。只有当所有运行完毕时,您才能调用resizeStrip
。
相关文章:
- 我是否可以检测到javascript正在被卸载(作为调试模式)
- 是否可以检测父方法是否被覆盖
- 是否可以检测链接是否已被JavaScript禁用
- 是否可以检测到谷歌地图何时拒绝了API密钥
- 是否可以检测网页上所有异步任务的完成情况
- 是否可以检测IE何时忽略xml文档中的空白文本节点
- 是否可以检测导致页面重新加载的操作
- 是否可以检测网页是否显示在Infragistics igDialog中
- 是否可以检测到在不使用键代码 javascript 的情况下按下了输入键
- 是否可以检测到在右键单击浏览器上下文菜单上的左键单击
- 是否可以检测哪个行或函数触发了元素上的jquery更改事件
- 是否可以检测脚本是否作为RequireJS模块加载
- javascript中是否有检测文档更改的功能
- 网页是否可以检测到连接的外部显示器
- Mozilla Rhino是否可以检测并报告它是否正在调用Deprecated Java方法?
- 是否可以检测何时执行了Firebase快照
- 是否存在检测最后一次导航事件是否由后退或前进浏览器按钮引起的方法
- 当用户不安全地加载页面时,页面是否可以检测到?
- 是否可以检测到用户在IE8-9中打开开发人员工具?
- 是否未检测到转换服务器