我使用了在堆栈中找到的一些代码来进行滚动定位,效果很好,但是现在我混合使用了vm(controller as)和$ scope。
如何删除此代码的$ scope? document.on内部有一个函数,但是如果我更改它,vm似乎是未定义的。 这种上下文称为什么,我必须将作用域传递给这样的函数?
(function () {
'use strict';
angular.module('App').controller('BaseCtrl', ['$document', '$window','$scope', function ($document, $window,$scope) {
var vm = this;
vm.topMenuClass = "scene-topheader_largeLogo";
$document.on('scroll', function () {
// or pass this to the scope
$scope.$apply(function () {
if ($window.scrollY > 100) {
vm.topMenuClass = "scene-topheader_smallLogo";
}
if ($window.scrollY < 70) {
vm.topMenuClass = "scene-topheader_largeLogo";
}
});
});
}]);
//end
}());
答案 0 :(得分:2)
这种类型的上下文叫什么,我必须将作用域传递给这样的函数?
从文档中:
AngularJS通过提供自己的事件处理循环来修改常规JavaScript流。这将JavaScript分为经典和AngularJS执行上下文。只有在AngularJS执行上下文中应用的操作才能受益于AngularJS数据绑定,异常处理,属性监视等。
您还可以使用
date,time,val1,val2 20jun,01:00,10,320 20jun,02:00,10,50 21jun,01:00,10,130
从JavaScript输入AngularJS执行上下文。请记住,在大多数地方(控制器,服务)$apply()
已由处理事件的指令为您调用。仅在实现自定义事件回调或使用第三方库回调时才需要显式调用$apply
。
有关更多信息,请参见