JavaScript - AngularJS范围问题:全局范围中的对象在函数

时间:2017-06-29 23:44:20

标签: javascript angularjs

我的AngularJS指令中有一个事件处理程序:

angular.element($window).on("wheel", onScrollAction);

在我的指令onScrollAction之前,我已经在onScrollAction函数本身之外定义了一些变量,因为我不希望它们在每个轮子事件中都被分配,因为他们不应该这样做变化

app.directive('scroll', function ($window) {
    return function(scope, element, attrs) {
    var elem = angular.element(document.querySelectorAll('.titletitle')).eq(1);
    var elemHeight = elem[0].scrollHeight;
    //so on until the 5th element
    //then object to store all the elements and their heights:
    var theObject = [{el:elem,elH:elemHeight},{el:elem2,elH:elem2Height},{el:elem3,elH:elem3Height},{el:elem4,elH:elem4Height},{el:elem5,elH:elem5Height}]
    var theActiveElem = theObject[0];
    var onScrollAction = function (event) {
    console.log(theActiveElem) //renders undefined
    console.log(elem) // renders the element

我的问题是,elem如何从全局范围转到函数范围,当theActiveElem不是时,我如何修复它以便我可以对{{1在我的事件处理程序中。

谢谢。

1 个答案:

答案 0 :(得分:0)

这对我来说真的很奇怪,想要一个解释......

我在事件处理程序中的控制台日志看起来像:

        console.log(theActiveElem,theObject); //theActiveElement undefined
        thepatch = Math.floor(theoffset/theActiveElem.elH)
        if(thepatch==1){
            var theActiveElem = theObject[thepatch];
            console.log(theActiveElem);
        }

但是,只要我将var theActiveElem = theObject[thepatch];更改为theActiveElem = theObject[thepatch];,就会修复。

我认识到我不应该在该行上使用var声明它,但为什么会导致日志中的错误几行?

无论如何,现在已经解决了。