Ich denke nicht, dass Sie die reload() -Methode direkt auslösen können, da es Teil des Controllers ist, der nur innerhalb der Direktiven sichtbar ist.
Sie können entweder ...
A) Trigger ein Neuladen direkt von Mauerwerk über das Element, jQuery-Stil
(siehe http://jsfiddle.net/riemersebastian/rUS9n/10/):
$scope.doReloadRelatively = function(e) {
var $parent = $(e.currentTarget).parent().parent();
$parent.masonry();
}
$scope.doReloadViaID = function() {
$('#container').masonry();
}
B) oder erweitern Sie die Anweisungen selbst, dh fügen Sie die erforderlichen Uhren auf Mauerwerk Ziegel hinzu und rufen Sie die Methode reload() auf (hängt davon ab, welchen Anwendungsfall Sie haben).
.directive('masonryBrick', function masonryBrickDirective() {
return {
restrict: 'AC',
require: '^masonry',
scope: true,
link: {
pre: function preLink(scope, element, attrs, ctrl) {
var id = scope.$id, index;
ctrl.appendBrick(element, id);
element.on('$destroy', function() {
console.log("masonryBrick > destroy")
ctrl.removeBrick(id, element);
});
scope.$watch(function() {
return element.height();
},
function (newValue, oldValue) {
if (newValue != oldValue) {
console.log("ctrl.scheduleMasonryOnce('layout');");
ctrl.scheduleMasonryOnce('layout');
}
}
);
...
In dem Codeblock oben habe, habe ich einfach eine Uhr auf dem Elemente mit der Klasse ‚Mauerwerk-Ziegel‘, um einen erneuten Laden von Mauerwerk auszulösen, wenn die Höhe Elemente ändert.
Ich habe ein jsFiddle zum Testen von Eckverkleidungen von Passys selbst entwickelt, bitte schauen Sie es sich an!
http://jsfiddle.net/riemersebastian/rUS9n/10/
EDIT:
Nur eine ähnliche Position auf Stackoverflow gefunden, die eine andere Lösung für dieses Problem sein könnte:
AngularJS Masonry for Dynamically changing heights
Obwohl es funktioniert nicht dokumentiert. Danke für den Zeiger. Ich musste das $ Timeout nicht setzen, damit es funktioniert, also hast du Recht (das hat etwas mit deinem spezifischen Setup zu tun). – cristiano2lopes