In Angular lernen Ich erstelle eine einfache Galerie, die gezoomt werden kann. Meine anfängliche Implementierung verwendete eine einfache ng-Wiederholung, aber ich entdeckte schnell, dass ich basierend auf dem Zoom der Galerie Dinge wie die URL-Quelle (von kleinen zu mittleren Thumbs) und wahrscheinlich die CSS auf Bildunterschriften etc. ändern wollte.Angular Direktiven beobachten externe Modelle
<div class="photoHolder" ng-repeat="photo in photos | filter:{caption:query} | orderBy:orderProp" ng-attr-style="transition: .3s ease; width: {{thumbWidth}}px; height: {{thumbWidth}}px;">
<div class="photoClass" data-id="{{photo.id}}" ng-attr-style="background-image:url({{zoomSize < 5 ? photo.thumb_url : photo.medium_url}})"></div>
<div class="caption">{{photo.caption}}</div>
<div class="caption">{{photo.date}}</div>
</div>
Also wechselte ich zu einer viel sauberen Richtlinie:
<gal-photo class="photoHolder" ng-repeat="photo in photos | filter:{caption:query} | orderBy:orderProp"/>
aber die einzige Art, wie ich die Richtlinie Element der Zoomänderung zu reagieren bekommen könnte, ist eine Uhr auf den Zoom innerhalb des Link hinzufügen zu das Element:
link: function(scope, element, attrs) {
var image = new Image();
scope.photo.url = scope.zoomSize < 5 ? scope.photo.thumb_url : scope.photo.medium_url;
scope.$watch('thumbWidth', function() {
scope.photo.url = scope.zoomSize < 5 ? scope.photo.thumb_url : scope.photo.medium_url;
element.attr('style', 'transition: .3s; width: ' + scope.thumbWidth + 'px; height: ' + scope.thumbWidth + 'px;');
});
}
Ich weiß, dass Sie Uhren nicht missbrauchen sollen, und meine Angst ist, dass Sie mit 500 Elementen in der Galerie 500 Uhren machen. Aber ich kann keine Anleitung finden, auf externe Eingaben innerhalb wiederholender Anweisungen zu reagieren. Die beiden Galerien scheinen ungefähr gleich zu sein, aber ich frage mich, ob ich das falsch mache? Hier ist eine Geige für die original gallery und eine Geige für die directive version.
Ich mochte Ihre ursprüngliche Lösung mit ng-attr-Stil, weil es weniger Code ist, aber es klingt, als ob dies mehr eine Frage der Leistung ist. Ich würde Fragen wie diese prüfen-> http://stackoverflow.com/questions/20702140/improving-nested-ng-repeat-directive-performance – koolunix
Ja, ich habe das bereits überprüft ... Ich suche nach Anleitung in die Art, wie Menschen mit externen Eingaben in Modellen umgehen. Wie gesagt, die Performance ist nicht merklich anders. Ich bevorzuge die Direktive, da es weniger HTML ist und mächtiger scheint, ich habe mich nur gefragt, ob ich es falsch mache. –
Das ist auch ein wirklich gutes: http://StackOverflow.com/Questions/9682092/Databinding-in-angularjs/9693933#9693933 – koolunix