如何在angular($ window).bind()中访问它?

时间:2016-03-27 16:26:16

标签: javascript angularjs angularjs-scope

我试图在用户滚动时执行操作,但是我无法访问控制器的范围。

我的代码是:

(function() {
    angular.module("myApp")
        .controller("MyController", ['$window', function($window){

            this.sidebarFixed = false;  

            angular.element($window).bind("scroll", function() {
                console.log(this.sidebarFixed);
            });
    }]);
})();

此输出为undefined。如何在函数内访问this

1 个答案:

答案 0 :(得分:2)

事件处理程序中this的上下文不是控制器...它是window,因为那是$window引用

尝试在变量中存储控制器this的引用,并在事件处理程序中使用它。

您的问题是在javascript中使用this的常见问题,因此存储引用始终是一种很好的做法

(function() {
    angular.module("myApp")
        .controller("MyController", ['$window', function($window){
            var vm = this; // store reference then always use variable
            vm.sidebarFixed = false;  

            angular.element($window).bind("scroll", function() {
                // `this` is `window` here
                console.log(vm.sidebarFixed);
            });
    }]);
})();