gpt4 book ai didi

javascript - scope.$apply 未定义,在滚动指令中不起作用

转载 作者:行者123 更新时间:2023-11-27 23:03:16 25 4
gpt4 key购买 nike

我正在尝试对我的 div 使用滚动指令。当用户向下滚动并到达 div 末尾时,我想调用一个函数。它给了我未定义的 Scope.$apply 函数?请任何人帮忙。提前致谢这是我的 html 代码

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

这是应用程序和 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
}
});
}
};
});

最佳答案

如果我没记错的话,你的scope.$apply函数调用返回undefined的原因是因为你的showMore函数没有返回值。如果您查看 Angular 中 $apply 函数的源代码,您会看到许多实现,但它们或多或少都只是调用 $eval 函数:

来自 Angular 的来源

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

因此,我假设 Angular 试图将滚动属性的值评估为正在执行函数的 Angular 表达式,并且因为函数不会返回任何未定义的内容。

这当然是对为什么你从scope.$apply中得到未定义的返回值的解释,但并没有回答你为什么需要知道返回值的问题?

关于javascript - scope.$apply 未定义,在滚动指令中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36857883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com