范围。$ apply是未定义的,不适用于scrolly指令

时间:2016-04-26 07:18:22

标签: javascript angularjs scroll

我试图为我的div使用scrolly指令。当用户向下滚动并结束div时,我想调用一个函数。它给了我未定义的范围。$ apply函数? 请任何一个帮助。提前谢谢 这是我的HTML代码

 <div id="container"  style="
  position:absolute;
  top: 60px;
   width: 100%;
  left:0px;height:91%;overflow-y:scroll;" scrolly="showMore()" >

这是app和controller

 var app = angular.module('smac',[]);
 app.controller('asd',function ($http,$scope) {
   $scope.showMore = function(){

     alert('div finished');
  }
  });

,指令是

   app.directive('scrolly', function () {
return {
    restrict: 'A',
    link: function (scope, element, attrs) {
        var raw = element[0];
        console.log('loading directive');

        element.bind('scroll', function () {
            console.log('in scroll');

            console.log(raw.scrollTop + raw.offsetHeight >= raw.scrollHeight)
            if (raw.scrollTop + raw.offsetHeight >= raw.scrollHeight) {
               scope.$apply(attrs.scrolly)

                console.log(scope.$apply(attrs.scrolly)); // this is undefined
            }
            });
    }
};
 });

2 个答案:

答案 0 :(得分:1)

如果我没有弄错,你的范围。$ apply函数调用返回undefined的原因是因为你的showMore函数没有返回值。如果你看看角度为$ apply函数的源代码,你会看到许多实现,但它们都或多或少只是调用$ eval函数:

来自角色的来源

function $apply(expr) {
    try {
        return $eval(expr);
     } catch (e) {
         $exceptionHandler(e);
     } finally {
          $root.$digest();
      }
 }

Here is a link to another SO question about what $eval does

所以我假设有什么角度试图将滚动attr的值作为执行函数的角度表达式来评估,因为你的函数没有返回任何你未定义的东西。

这当然是对你为什么未定义为范围的返回值的原因的解释。$ apply但不能回答你为什么需要知道返回值的问题?

答案 1 :(得分:0)

应为$scope.$apply

你错过了范围前的$