【问题标题】:Call jquery masonry using angularjs使用 angularjs 调用 jquery masonry
【发布时间】:2014-10-20 16:37:54
【问题描述】:

我正在尝试让 angularjs 与 jquery masonry 一起使用。没有角度我已经设法让砖石工作正常,包括css。但是,我使用 angular 编写了整个 web 应用程序的脚本,现在我通过 angular 动态加载项目。由于在动态添加数据后需要重新加载砌体,我编写了一个指令来监听角度重复中项目的最后一个元素,以便我可以调用 jquery 砌体。当我打电话给砌体时,由于某种原因,这些项目变得很奇怪,并且在最初没有 ng-repeat 的情况下加载时不会加载。请检查下面给出的代码,并告诉我我在这里做错了什么。我希望我有 plunkr/js fiddler,但由于我从后端提取数据,我无法复制相同的数据。

我使用的库叫做“ma​​sonry.pkgd.js”

<div id="container" class="masonry js-masonry"  data-masonry-options='{ "columnWidth": ".grid-sizer", "itemSelector": ".item", "isFitWidth": true }'>
        <div class="grid-sizer"></div>-
         <div ng-repeat="item in items" class="{{item.class}}" newsitemupdated>       
             <?php $this->load->view('item') ?>
         </div>                 
 </div>

app.directive('newsitemupdated', function ($timeout) {
    return {
        restrict: 'A',
        link: function (scope, element, attr) {
            if (scope.$last === true) {
                $timeout(function () {
                     masonryUpdate();
                });
            }
        }
    }
});

var masonryUpdate = function() {

            var $container = $('#container').masonry({
                columnWidth: '.grid-sizer',
                itemSelector: '.item',
                isFitWidth: true
            });

                setTimeout(function() {

//                    $('#container').masonry();                    
                    $container.masonry('reloadItems');
                    console.log('called');

                }, 500);

}

这是我重新加载项目下面的样子。

这就是我重新加载项目后的样子

请告诉我我做错了什么以及如何在 ng-repeat 之后调用重新加载项目来加载 jquery masonry 它应该如何加载。

【问题讨论】:

    标签: angularjs angularjs-directive angularjs-ng-repeat jquery-masonry masonry


    【解决方案1】:

    我已经通过以下操作修复了

    首先我编写了一个函数来使用选项初始化我的砌体

    function BuildMasonry() {
    
        var $container = $('#container').masonry();
    
        $container.masonry({
            columnWidth: '.grid-sizer',
            itemSelector: '.item',
            isFitWidth: true
        });
    }
    

    之后我会在 ng-repeat 完成加载时调用它。

    var masonryUpdate = function() {
    
        $('#container').masonry('reloadItems');
        BuildMasonry();
    }
    

    希望这对那里的人有所帮助:)

    【讨论】:

    • 如何检测 ng-repeat 何时完成加载?
    • 您可以使用指令并在作用域上。$last,更新砌体。
    • 嗨,您是在 angularjs 模块中使用指令声明这些函数,还是在哪里声明这些函数? 'reloadItems' 在这里指的是什么?非常感谢。
    • 没错。使用您定义的角度控制器创建指令。全部加载后,重新加载项目调用以更新砌体。就是这样!
    猜你喜欢
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 2011-07-11
    • 2014-07-02
    • 1970-01-01
    • 2018-06-07
    相关资源
    最近更新 更多