Próbuję utworzyć niestandardową dyrektywę, która zmienia jej zawartość jako siatkę. Chcę przetłumaczyć wynik dyrektywy ng-repeat
, a następnie zmienić kolejność elementów wynikowych.Jak uzyskać uchwyt elementów potomnych powtarzających ng w mojej dyrektywie niestandardowej?
Problem polega na tym, że wywołuję metodę element.children()
w funkcji łącza, mam pustą tablicę, ponieważ dyrektywa ng-repeat
nie jest jeszcze renderowana i jest interpretowana jako komentarz.
W przeciwnym razie dyrektywa działa świetnie, jeśli jej zawartość jest "statyczna".
HTML
<grid n='6'>
<div ng-repeat="i in [1,2,3]"></div>
</grid>
Moja dyrektywa tylko z ciekawszych kawałków kodu:
app.directive('grid', [function() {
return {
restrict: 'E',
replace: true,
transclude: true,
template: "<div ng-transclude></div>",
link: function (scope, grid, attrs) {
// With an ngRepeat transcluded, els result in an empty array
var els = grid.children();
// ...
};
}]);
Czego mi brakuje?
W ramach swojej funkcji łącza można spróbować użyć $ Timout (function() {// grid dostępu dzieci}, 0); – Chandermani
To rzeczywiście działa, ale czy ta metoda jest niezawodna? –
Rzeczywiście, szablon podrzędny zostanie zrenderowany po funkcji łączenia postów, więc musisz dodać wartość $ timout, to działałoby, ponieważ wprowadza pewne opóźnienie. – Chandermani