我正在尝试在angularJS应用程序中实现packery。
当我逐个手动定义项目时(参见注释的html代码),Packery工作正常。 当我尝试使用ng-repeat循环执行相同的操作时,packery不起作用。
如何在angularJS模板中使用ng-repeat制作包装?
模板:
<div class="item-container" workspace>
<div class="module-sizer"></div>
<div class="gutter-sizer"></div>
<div
ng-repeat="item in items"
class="item">
<!--my {{angular content}} here-->
</div>
<!-- this works: -->
<!--
<div class="item">
item 1
</div>
<div class="item">
item 2
</div>
<div class="item">
item 3
</div>
<div class="item">
item 4
</div>
<div class="item">
item 5
</div>
<div class="item">
item 6
</div>
<div class="item">
item 7
</div>
-->
</div>
角度指令,基于: http://codepen.io/gruntruk/pen/Cpewt/
myApp.directive('workspace', ['$rootScope', function ($rootScope) {
return {
constrain: 'A',
link: function (scope, element, attrs) {
element.ready(function () {
var packery = new Packery(element[0], {
rowHeight: '.module-sizer',
itemSelector: '.item',
columnWidth: '.module-sizer'
});
angular.forEach(packery.getItemElements(), function (item) {
var draggable = new Draggabilly(item);
packery.bindDraggabillyEvents(draggable);
});
packery.layout();
});
}
};
}]);
答案 0 :(得分:0)
好的,我找到了答案。
1)我必须使用一个指令来控制器接收一个事件
2)我不得不添加一个setTimeout。
app.directive('lastRepeat', function () {
return function(scope, element, attrs) {
if (scope.$last) setTimeout(function(){
scope.$emit('LastElement', element, attrs);
}, 1);
};
});