【发布时间】:2013-05-06 10:19:38
【问题描述】:
我正在开发一个“艺术画廊”应用程序。
随意拉下 source on github 并使用它。
目前让 Masonry 与 Angular 配合得很好的解决方法:
.directive("masonry", function($parse) {
return {
restrict: 'AC',
link: function (scope, elem, attrs) {
elem.masonry({ itemSelector: '.masonry-brick'});
}
};
})
.directive('masonryBrick', function ($compile) {
return {
restrict: 'AC',
link: function (scope, elem, attrs) {
scope.$watch('$index',function(v){
elem.imagesLoaded(function () {
elem.parents('.masonry').masonry('reload');
});
});
}
};
});
这不好用,因为:
- 随着内容的增长,在整个容器上触发重新加载的开销也会增加。
reload 函数:
- 不“追加”项目,而是重新排列容器中的每个项目。
- 是否在项目从结果集中过滤时触发重新加载。
在我上面给出的应用程序的上下文中,这个问题很容易复制。
我正在寻找一种使用指令来利用的解决方案:
.masonry('appended', elem) 和.masonry('prepended', elem)
而不是每次都执行.masonry('reload')。
.masonry('reload') 表示何时从结果集中删除元素。
编辑
该项目已更新为使用下面的工作解决方案。
在 GitHub
上获取来源在 Plunker
上查看工作版本【问题讨论】:
-
你能在 plunker/jsfiddle 中发布你的代码吗?会更容易测试。我很难理解你的问题;您是否希望能够在添加时选择是否添加新项目,而无需调用
reload?查看Masonry adding items example page 的来源,似乎它们在添加项目时触发了重新加载:$container.prepend($boxes).masonry('reload'); -
@GFoley83 是的 --- 能够控制如何添加项目以及何时重新加载容器,而无需采用骇人听闻的解决方案。这是一个完整来源的 plunker:plnkr.co/akHTslTdRMvfe3KrnPeO。
.masonry('prepended', elem)的重新加载很好——希望这将是一个容易实现的。.masonry('appended', elem)但似乎这将是一个真正的问题。 -
@DanKanze,我试过你提到的工作版本。但面对“找不到指令‘ngInit’所需的控制器‘砌体’!”问题。我已经注册了“wu.masonry”。请帮助
-
哦,知道了angularjs bug
标签: javascript jquery angularjs