vm和范围的滚动位置混合

时间:2019-06-23 16:11:31

标签: angularjs

我使用了在堆栈中找到的一些代码来进行滚动定位,效果很好,但是现在我混合使用了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
}());

1 个答案:

答案 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

     

有关更多信息,请参见