牛骨文教育服务平台(让学习变的简单)
博文笔记

解决angularjs+bootstrap轮播图不自动播放

创建时间:2017-04-28 投稿人: 13974967195 浏览次数:306

之前我写过一篇关于《angularjs+bootstrap 写轮播效果》,这里关于页面布局的相关代码就不多说了,大家想看的可以去这个地址:

http://www.toutiao.com/i6406132881248223746/

后来,发现一个问题,就是轮播图不会自动播放。

研究来研究去,才发现,bootstrap的效果是基于window.load()事件触发的,而angularjs则是在浏览器加载完页面后执行的,所以,当它触发的时候,angular还没有开始渲染。

因此,这个问题的解决办法就要在angularjs渲染完成之后,再开始执行触发轮播事件。

首先,我们需要自定义个一个指令,这个网上有很多,大家根据自己的需求来:

app.directive("onFinishRender", function ($timeout) {

return {

restrict: "A",

link: function (scope, element, attr) {

if (scope.$last === true) {

$timeout(function () {

scope.$emit("ngRepeatFinished");

});

}

}

}

});

上面这个指令很好理解,$last是最后一条数据,所以,判断当最后一条数据渲染完成后,scope.$emit触发定义的事件监听“ngRepeatFinished”。

然后,我们在html中插进轮播代码的地方引入上面自定义的指令属性:

<div ng-bind-html="trustHtml" on-finish-render></div>

最后,我们在controller中,添加下面这段代码:

$scope.$watch("ngRepeatFinished", function( ngRepeatFinishedEvent ) {

$(".carousel").carousel();

})

上面的代码就是监听当轮播渲染完成后,开始执行自动播放。

还有值得注意的一点是,我看网上有的是用的$scope.$on()这个来监听的,我试了之后没效果。换了$scope.$watch()这个是有效果的。

大家有高见的留言指教。多谢!!!

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。