jak mówię w pytaniu, co staram się osiągnąć jest odpowiednikiem kodu jak te w kątowa tylko:Jak ustawić margines stopki na podstawie wysokości innych elementów w Angular i bez jQuery?
jQuery sposób
$(document).ready(function(){
var windowHeight = $(window).height();
var headerHeight = $('header').height();
var footerHeight = $('footer').height();
var contentHeight = $('.content').height();
var paginationHeight = $('.pagination').height();
var footerMarginTop = (windowHeight - headerHeight - footerHeight) - (contentHeight + paginationHeight);
$('footer').on('content.loaded', function() {
if(footerMarginTop > 0) {
$(this).css('margin-top', footerMarginTop + 'px');
}
}
});
Na dokumencie gotowy muszę ustawić margines górny stopki na podstawie obliczenia wysokości innych elementów, po załadowaniu zawartości strony. Myślenie w jQuery jest łatwe do zrobienia, ale w kątowa tylko nie znalazłem innego sposobu oprócz tłumaczenia go bezpośrednio jak ta, z katalogu
Kątowymi sposób
angular.module('myApp', []).directive('FooterMargin', ['$window', '$document', function($window, $document){
return {
restrict: 'A',
link: function(scope, element, attrs) {
var windowHeight = $window.innerHeight;
var headerHeight = $document[0].getElementById('header').offsetHeight;
var footerHeight = $document[0].getElementById('footer').offsetHeight;
var paginationHeight = $document[0].getElementById('pagination').offsetHeight;
var contentHeight = $document[0].getElementById('content').offsetHeight;
var footerMarginTop = (windowHeight - headerHeight - footerHeight) - (contentHeight + paginationHeight);
scope.$on('content.loaded', function(){
if(footerMarginTop > 0) {
attrs.$set('style', 'margin-top: ' + footerMarginTop + 'px');
}
}
});
}
};
}]);
dodałem do identyfikatorów moje elementy, aby odzyskać je w Angular, ale nawet jeśli działa, wydaje mi się, że nie jest to dobry sposób na zrobienie tego, a także trudno jest go przetestować.
nie mogę używać jQuery w tym projekcie, a ja używałem kątowa do drugiej dyrektywy o wydarzeniach, które łatwiej się z nim (jak czasowniki modalne i rozwijanego menu) w zadowalający sposób
Pomożesz mi zrozumieć jak podejść do tego w lepszy sposób Angular?
Dlaczego robisz to w JavaScript, a nie z CSS? Możesz również użyć Jquery Lite, który jest zawarty w kanciastym. – Skatox
Nie mogę używać tylko css, ponieważ muszę popchnąć stopkę na tyle, aby użytkownik mógł zobaczyć ostateczną treść strony nad zakładką, więc muszę obliczyć wszystko na podstawie wysokości zawartości (czyli zawsze różne). i nie używam jqLite, ponieważ nie można wybrać znaczników z klasami lub identyfikatorami – urbando
Możesz to zrobić za pomocą zwykłego kodu JavaScript. –