2016-04-26 84 views
2

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

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

这里是应用程序和控制器

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 
      } 
      }); 
    } 
}; 
}); 
+1

该控制台日志正在打印作用域的返回值$ apply,我敢打赌是未定义的。如果你想检查的范围,$ apply本身是未定义的,你需要使用。 'console.log(scope。$ apply);' –

+0

为什么它返回undefined? @ZacBraddy – Asad

+0

你真正的问题是什么?你想要达到什么目标,而且哪些不起作用? – kabaehr

回答

0

应该$scope.$apply

你错过了$范围前

+0

这不是问题@Vinod – Asad

+0

参数也是一个范围。 – Asad

+0

按照控制器的约定,他的函数的参数被称为'scope'而不是'$ scope'。我认为使用'scope'作为链接函数的一个参数来源于角度文档中给出的很多链接函数的例子。 –

1

如果我没有弄错,你的范围。$ apply函数调用返回未定义的原因是因为你的showMore函数没有返回值。如果你看看源代码,$的角度应用功能,你会看到一些实现,但它们都或多或少只需调用$ 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

所以我会承担什么角度试图做评估scrolly的值作为ATTR正在执行的功能,因为你的函数没有返回任何你越来越不确定的角度表达。

这当然是一个解释为什么你得到undefined作为范围的返回值$ apply但不是答案你为什么需要知道返回值的问题?

+0

看看这个小提琴@Zac我工具从这里的scroly代码[http://jsfiddle.net/ADukg/4831/] – Asad

+0

链接已打破@Asad –

+0

这里是问题链接检查出小提琴从答案@ZAC [http:/ /stackoverflow.com/questions/21989923/scroll-event-is-not-fired-inside-directive-angular-js] – Asad

相关问题