javascript - ng-repeat 后的 AngularJS NanoScroller 不显示

标签 javascript jquery angularjs scrollbar angularjs-ng-repeat

我浏览了很多关于 stackoverflow 的帖子,但我还没有设法找到答案。我有一个 jQuery 滚动条插件 (nanoscroll),我希望它在 ng-repeat 之后更新。 正如这里的许多帖子所暗示的那样,我使用了这样的指令:

myApp.directive("postRender", function() {
    return function(scope, element, attrs) {
        jQuery('.nano').nanoScroller({preventPageScrolling: true});
    }
});

然后我有类似的东西:

<div class="nano"> <!-- my scrollable area -->
    <div ng-controller="MyController">
        <div ng-repeat="item in items" post-render>
        ...
        </div>
    </div>
    Some content here...
</div> <!-- my scrollable area -->

问题是(我不知道为什么),如果内容比 .nano div 的可用大小稍大那么滚动条就不会显示。

我相信 AngularJS 在尝试更新 nanoscroller 之前不会等到在 Controller 之后插入内容,并且该内容是在 posrt-render 指令之后添加的。 顺便说一句,我怀疑这个问题来自 NanoScroller,因为当我按 F11 两次(全屏并返回正常模式)时,没有任何 DOM 修改,滚动条出现了。

谢谢, 希尔纽斯

____ 回答

我终于找到了解决方案。对于那些好奇的人,有必要使用 $timeout 服务。像那样:

myApp.directive('postRender',['$timeout', function (timer) {
    return {
        link: function (scope, elem, attrs, ctrl) {
            timer(function () {
                    jQuery('.nano').nanoScroller({preventPageScrolling: true})
                 }
                 , 0);
        }
    }
}]);

虽然我找到了解决方案,但我仍然不知道那里存在的问题。我相信这是因为 angular 指令没有等待 DOM 被完全修改,也许有时间问题。

最佳答案

OP 找到了解决方案。

需要使用$超时服务。像这样:

myApp.directive('postRender',['$timeout', function (timer) {
    return {
        link: function (scope, elem, attrs, ctrl) {
            timer(function () {
                    jQuery('.nano').nanoScroller({preventPageScrolling: true})    
                 }, 0);
        }
    }
}]);

关于javascript - ng-repeat 后的 AngularJS NanoScroller 不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19666099/

相关文章:

angularjs - ng-clip 复制到剪贴板不起作用

javascript - AngularJS - 如何验证元素指令?

javascript - 如何在这种情况下使用 .on() 函数

Javascript 弹出窗口 - 在 FF 和 Chrome 中有效,在 IE 中失败

jquery - 根据事件链接水平居中滚动

javascript - 如何根据 jQuery 中的复选框选择向表添加和删除 <tr>

jquery - jquery 菜单中默认可见的幻灯片

javascript - 滚动页面以更改事件/当前菜单项

javascript - 将单个值与数组进行比较

javascript - 在 Controller 之间传递id值