我从服务中获取数据并使用 ng-repeat 在视图中显示。实际上,当用户滚动到底部意味着当用户到达底部我会做某事时我得到事件。当它到达时我正在改变我的数组的竞争。我在ng-repeat数组(显示数组)中获得了正确的竞争,但它没有反映在视图上为什么?我可以使用 $ scope.apply()或$ scope.digest()
这是我的代码
在这里,我正在改变我的显示数组的竞争,这不会反映在视图
上 def send_photo_attachment
@tempfile = Tempfile.new
@tempfile.binmode
@tempfile.write request.body.read
@tempfile.rewind
uploaded_file = ActionDispatch::Http::UploadedFile.new(
tempfile: @tempfile,
filename: "photo.jpg"
)
uploaded_file.content_type = "image/jpeg"
@message_content = MessageContent.new
@message_content.content = uploaded_file
@message_content.mimetype = "image/jpeg"
render :attachment_id
end
答案 0 :(得分:1)
正如@Claies所提到的,你应该使用apply()。虽然digest()可能也有效.apply()在内部调用digest()。他还提到,每次滚动时,似乎存储页码的变量都会重置为0。您应该将其存储在该处理程序之外的范围变量中。 我尝试用最小的改变来修复
http://plnkr.co/edit/izV3Dd7raviCt4j7C8wu?p=preview
.directive("scrollable", function() {
return function(scope, element, attrs) {
var container = angular.element(element);
container.bind("scroll", function(evt) {
console.log('scroll called'+container[0].scrollTop);
var counter = scope.page;
if (container[0].scrollTop <= 0) {
if (scope.var > 0)
scope.display = scope.arrays[--scope.var].concat(scope.arrays[scope.var+1]);
}
if (container[0].offsetHeight + container[0].scrollTop >= container[0].scrollHeight) {
if (scope.var < scope.arrays.length)
scope.display = [];
var nextvar = ++counter;
var increment = counter + 1
console.log("nextvar:" + nextvar + "increment:" + increment)
scope.display = scope.arrays[nextvar].concat(scope.arrays[increment]);
console.log(scope.display)
scope.page = counter;
}
scope.$apply();
});
};
})
通常我会以不同的方式实现这一点。例如,通过在列表底部放置一个旋转轮,当显示时,您将获得其余数据。 很难给你一个完整的工作的plunker。可能你应该在plunker中有多个JSON文件,每个文件包含一个页面的数据,这样我们就可以将数据添加到显示列表的底部。
答案 1 :(得分:0)
修改display
数组后,您只需调用scope.$apply()
即可运行$digest
周期并更新视图。您还需要在控制器或指令中初始化scope.var
并有条件地修改它。
如果这是你想要的,我不会。我修改过的plunker看看。 http://plnkr.co/edit/J89VDMQGIXvFnK86JUxx?p=preview