在我的项目中,我尝试实现 jquery masonry。但它正在发挥作用。我尝试谷歌搜索但发现了一些帖子。但我试过了,它不起作用。
我的指令代码是
shout.directive("shoutList", function($timeout) {
return {
restrict : 'E',
replace : true,
templateUrl : 'views/shout/shout-list.html',
scope : {
shouts : "="
},
//require : "ShoutController",
controller : function($scope) {
$scope.deleteShout = function() {
console.log('shout deleted');
}
},
link : function(scope, element, attr) {
scope.$watch('shouts', function() {
// console.log("changing......");
// scope.$evalAsync(
document.getElementById("shout-content-holder").masonry({
itemSelector: '.shout'
})
// );
});
}
}
});
指令模板是
<div id="shout-content-holder">
<div class="shout" ng-repeat="shout in shouts">
<p>{{shout.message}}</p>
<img src="media/images/delete.png" width="32" height="32" ng-click="deleteShout()"/>
</div>
</div>
我从网络服务加载喊叫声。请帮助我完成这项工作...
将我在评论中提到的内容作为答案。这实际上可以使用模板来完成,而不是使用 .append() ,它会更干净。您需要的是一个包含列列表和 ng-repeat 的模板,应该也能正常工作,但是您必须等待第一个项目插入,然后才能计算插入第二个项目的位置;因此这里使用 .append() 。
.directive('columns', function(){
return {
restrict: 'E',
scope: {
itemList: '=', // a list of items
colCount: "@" // number of columns
},
link: function(scope, elm, attrs) {
//console.log(scope.itemList);
var numCols = parseInt(scope.colCount);
var colsArr = [];
for(var i=0; i< numCols; i++){
colsArr.push(angular.element("<div class='column' style='width:"+(100/numCols -.5)+"%' >Col "+(i+1)+"</div>"));
elm.append(colsArr[i]);
}
angular.forEach(scope.itemList, function(value, key){
var item = angular.element("<div class='item' style='height:"+value.height+"px; background:"+'#'+Math.floor(Math.random()*16777215).toString(16)+"'>"+value.value+"</div>");
var smallestColumn = getSmallestColumn();
angular.element(smallestColumn).append(item);
});
function getSmallestColumn(){
var smallestHeight = colsArr[0][0].offsetHeight;
var smallestColumn = colsArr[0][0];
angular.forEach(colsArr, function(column, key){
if(column[0].offsetHeight < smallestHeight){
smallestHeight = column[0].offsetHeight;
smallestColumn = colsArr[key];
}
});
return smallestColumn;
}
}
};
});
plnkr.co/edit/UyRS0clrCwDpSrYgBsXS?p=预览
您可能想在 $last ng-repeat 上触发 masonry() 调用,而不是使用 $watch。 我最近刚刚回答了一个有关此问题的问题,所以我会向您推荐:https://stackoverflow.com/a/14656888/215945
来自光明会世界精英帝国, 让穷人、有需要的人和有才华的人获得名誉、财富、权力和安全,在你的商业、政治竞选中得到认可,在任何事情上都达到顶峰,在精神和身体上得到保护!当您加入伟大的光明会帝国集团时,所有这些您将在眨眼间实现。一旦你加入伟大的光明会帝国,你将获得无数的好处。 今天加入光明会兄弟会并立即获得 4,000,000,00 美元的财富。您选择的汽车,您选择的豪宅,此目的是为了建立您作为光明会精英新成员的财务状况,这是我们为加入光明会兄弟会的新招募成员提供的众多福利之一。 请注意,此消息仅是为了我们的招募计划而创建,该计划将于下个月结束,并且此优惠仅适用于独特的人,如果您不认真加入光明会帝国秘密社团,建议您不要与我们联系全部。这是因为在我们的组织中,不忠诚是高度不能容忍的。 您同意成为光明会新世界秩序的成员吗?如果您这样做,请仅通过此直接招聘电子邮件回复:[email protected] 有关我们会员流程的更多说明。 光明会。