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