指令将结果应用于所有指令而不是仅一个指令

时间:2015-10-26 15:36:39

标签: javascript angularjs

我构建了此public Car() { BeanProvider.injectFields(this); } 来控制页面上的directive效果

affix

它工作正常,除非因为当我在页面上使用2个或更多元素时,效果(或者在本例中为类)被应用于页面上的所有指令。即使我使用不同的指令名称,例如:.directive('Affix', ['$window', function($window) { return { restrict: 'A', link: function(scope, element, attrs) { scope.width = element.prop('offsetWidth'); var elWidth = scope.width + 'px', elChild = angular.element(element[0].querySelector(':first-child')); elChild.css('width', elWidth); angular.element($window).bind("scroll", function() { var myElem = element[0]; yPosition = 0; function getPosition(element) { while(element) { yPosition += (element.offsetTop - element.scrollTop + element.clientTop); element = element.offsetParent; } } getPosition(myElem); if (yPosition >= 0) { elChild.removeClass('affix'); } else if ( yPosition < 0) { elChild.addClass('affix'); }; }); } }; }]) affix-me,结果也是一样的。

为什么我使用2个指令?

我需要这样做,因为它的工作方式。当它应该粘贴在页面上时,它会将元素应用于元素,因此正在应用具有affix-zero的类affix。但在这种情况下,我有一个元素需要距离顶部25px。

我注意到了什么

假设我使用了2个指令,例如position: fixed, top:0affixMe

affixOther有这段代码的地方:

affixMe

if (yPosition >= 0) { elChild.removeClass('affix'); } else if ( yPosition < 0) { elChild.addClass('affix'); }; 有以下代码:

affixOther

对于一些if (yPosition >= 24) { elChild.removeClass('affixOther'); } else if ( yPosition < 24) { elChild.addClass('affixOther'); }; 我注意到yPosition被调用正确,直到第一个元素到达顶部的点。

示例:

  • Elem.A:yPosition = 150;
  • Elem.B:yPosition = 270;

console.logElem.A时; yPosition = 0应该有Elem.B。但它从121到0。

有没有人知道如何解决这个问题? Ps。:我想保持纯粹的AngularJs / JS。没有Jquery。

0 个答案:

没有答案