我试图为我的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
}
});
}
};
});
答案 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
你错过了范围前的$