Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在($window).bind()中访问此文件?_Javascript_Angularjs_Angularjs Scope - Fatal编程技术网

Javascript 如何在($window).bind()中访问此文件?

Javascript 如何在($window).bind()中访问此文件?,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,当用户滚动时,我试图执行一个操作,但是我无法访问控制器的作用域 我的代码是: (function() { angular.module("myApp") .controller("MyController", ['$window', function($window){ this.sidebarFixed = false; angular.element($window).bind("scroll", functio

当用户滚动时,我试图执行一个操作,但是我无法访问控制器的作用域

我的代码是:

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

            this.sidebarFixed = false;  

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

此操作的输出为未定义的
。如何访问函数中的
this

事件处理程序中
this
的上下文不是控制器…它是
窗口
,因为这是
$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);
            });
    }]);
})();

事件处理程序中的
的上下文不是控制器…它是
窗口
,因为这是
$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);
            });
    }]);
})();

谢谢但是,当我更改该值时,它不会在视图中更新。我如何修复它?我将$scope注入我的控制器并调用了
$scope.$apply()
,它现在更新了视图,这是正确的方法吗?因为事件发生在angular上下文之外,如果您更新scope,您需要通知angular运行摘要。在大多数情况下,可以使用
$apply()
,但由于滚动事件可能在一秒钟内发生多次,因此最好使用
$timeout
谢谢。但是,当我更改该值时,它不会在视图中更新。我如何修复它?我将$scope注入我的控制器并调用了
$scope.$apply()
,它现在更新了视图,这是正确的方法吗?因为事件发生在angular上下文之外,如果您更新scope,您需要通知angular运行摘要。在大多数情况下,可以使用
$apply()
,但由于滚动事件可能在一秒钟内发生多次,因此最好使用
$timeout