Scrollposition микс вм и сфера - PullRequest
1 голос
/ 23 июня 2019

Я использовал некоторый код, который я нашел здесь, в стеке, для прокрутки, он отлично работает, но теперь у меня есть смесь 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 Ответ

2 голосов
/ 23 июня 2019

Как называется этот тип контекста, где я должен передать область действия в функцию, подобную этой?

Из документов:

AngularJS модифицируетнормальный поток JavaScript, предоставляя свой собственный цикл обработки событий.Это разбивает JavaScript на классический и AngularJS контекст выполнения.Только операции, которые применяются в контексте выполнения AngularJS, выиграют от привязки данных AngularJS, обработки исключений, отслеживания свойств и т. Д.

Вы также можете использовать $apply() для входа в контекст выполнения AngularJS из JavaScript.Имейте в виду, что в большинстве мест (контроллеры, сервисы) $apply уже был вызван для вас директивой, которая обрабатывает событие.Явный вызов $apply необходим только при реализации пользовательских обратных вызовов или при работе со сторонними обратными вызовами библиотеки.

Для получения дополнительной информации см.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...