【问题标题】:Angular material virtural repeat ajax requests 2nd page altough there is no 2nd pageAngular 材质虚拟重复 ajax 请求第 2 页虽然没有第 2 页
【发布时间】:2017-01-12 22:36:56
【问题描述】:

我有一个角度虚拟中继器,它在大多数情况下都能正常工作,但有时,根据我猜的项目计数,它会对服务器进行二次分页调用,尽管没有第二页。

例如,我的页面大小设置为 50。ajax 调用返回 36 个项目,我将内部更新如下:

 $http.get(url).success(function (data) {
     this.numItems = data.result.pagination.totalRecords;
     var items = data.result.departments; 
     ....// (I also tried changing the order of these lines)
     }).bind(this)

然后,列表会显示片刻,然后是对下一页的第二次 ajax 调用。它什么也不返回,由于我的服务器端代码,分页也是 0,最终删除了现有数据。

现在,即使请求了超出范围的页码,我也可以修改服务器端以返回行数,但我宁愿解决触发第二个 ajax 分页调用的问题,当显然没有更多时要显示的数据。

当只有一页时,大约有一半的时间会出现此问题。我的意思是,我一直单击刷新列表的按钮,有时它显示正常,有时不显示。

我使用的是 1.1.1/angular-material,中继器在全高 flex div 中。

谢谢

【问题讨论】:

    标签: angular-material


    【解决方案1】:

    您的 this.numItems 绑定到您的回调 function (data){}); 而不是父函数。尝试声明类似var self = this:

    var self = this;
    $http.get(url).success(function (data) {
     self.numItems = data.result.pagination.totalRecords;
     var items = data.result.departments;
    

    您仍然可能需要添加一些逻辑来检查外部某处的numItems

    【讨论】:

    • 事实并非如此,我使用 {{departments.numItems}} 来显示结果计数并正确显示。我在原始帖子中编辑了代码,添加:“}).bind(this)”到最后,我认为这是将自我绑定到父对象的部分,即“部门”。不知何故,转发者对第一个响应不满意,并认为下一页可能还有更多记录。我目前通过使用容器和项目的 CSS 高度来缓解这种情况,问题已经消失。但是开发正在进行中,所以我知道它会回来的:)我会继续发布这个帖子
    • 您以错误的方法调用bind。基本上,您将函数绑定到成功返回的内容。因此,您要么必须在外部声明回调并绑定它,要么使用 self 方法。如果您发布更大的代码 sn-p 会有所帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 2023-03-31
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    相关资源
    最近更新 更多