我如何按最近创建的列表列出提要中的帖子?

How can I list posts in a feed by the most recently created?

我的后端使用 Onymos。当我从 onymos 中提取数据时,它会给我一个 "arrange by" 属性,我可以在其中指定 "createdTime" 作为值,但是,由于某种原因,这不会转移到我的模板中。从我的谷歌搜索中,我认为 angular 中不再有 order by 指令。所以我不确定我还能如何在我的模板中订购它。 我的服务将一个数组传递给一个回调函数,该函数在 TS 主页的构造函数中触发。 我为此悬赏了,因为有人提供的第一个解决方案对我不起作用..一直导致错误。

HOME.HTML

<ion-card id="card" *ngFor="let event of listOfEvents" >      

    <ion-row id="row1">
        <ion-col>
           <span class="showDetails">Date:</span>
           {{getFormattedTime(event.eventTime, 'MM-dd-yyyy')}}
        </ion-col>
        <ion-col>
            <span class="showDetails">Time:</span>
            {{getFormattedTime(event.eventTime, 'HH:MM')}}
        </ion-col>
        <ion-col>
            <span class="showDetails">Venue:</span>
            {{event.venue}}
        </ion-col>                                                   
    </ion-row>

</ion-card>

MyService.TS

getPosts (selectedCity, successCallback, failureCallback) {

        OnymosUtil.getData(

            '/events/' + selectedCity,      
            function getPostsSuccess (listOfEventsObject){
                successCallback(listOfEventsObject);
            },//close function getPostSuccess
            function getPostsFailure (error) {              
                failureCallback(error);
            },
            {
                orderByField: 'createdTime', //OrderByField not working 
                limitToFirst: 100
        });

    }//end getPosts

HOME.TS

export class Home {

    listOfEvents: Array<any> = []; 
    postEvent: any; 

    constructor (public navCtrl: NavController,
                 public popoverCtrl: PopoverController,
                 public getPostSrvc: getPostsService) {

        this.listOfEvents = [];
        let that = this; 

        this.getPostSrvc.getPosts(
           this.selectedCity,
           function getPostsSuccess (listOfEventsObject) {
                for (var i in listOfEventsObject) {
                    that.listOfEvents.push(listOfEventsObject[i]);
                }
           },
           function getPostsFailure (error) {
             console.log('ERROR : home.ts : Failed retrieving Posts - ' + error);
            });
    }//close constructor 
}//close class

只需在客户端排序:

function successCallback (listOfEventsObject) {

    for (var x in listOfEventsObject) {
        that.listOfEvents.push(listOfEventsObject[x]);
    }
    // sort
    that.listOfEvents = that.listOfEvents.sort(function(a, b) {
        return a.createdTime - b.createdTime;
        // or vice versa
        // or any other way you wish to sort
    });

}
  • 你真的需要找出为什么你不能在服务器上排序。对于应用程序的生产版本,在客户端上排序可能会变得非常昂贵并且会减慢您的应用程序,特别是如果您的事件列表仅通过一两个事件进行更新。 也许您可以为 createdTime 使用更好的编码。您是否尝试过将此字段转换为时间戳值?例如,您可以使用 moment.js library:

    event.createdTime = moment().valueOf()

  • 其他用户建议的客户端排序是没有服务器排序的方法。但是,您可以通过同时插入和保持数组排序来使其更优化。

可以使用underscore库(或者自己写)找到推到哪里的索引,用下面的函数代替正常的push:

  sortedPush( array, value ) {
      array.splice( _.sortedIndex( array, value ), 0, value );
  }

此处找到的数组反转方法最适合我: https://www.w3schools.com/jsref/jsref_reverse.asp

this.getPostSrvc.getPosts(
           this.selectedCity,
           function getPostsSuccess (listOfEventsObject) {
                for (var i in listOfEventsObject) {
                    that.listOfEvents.push(listOfEventsObject[i]);
                }
                       **that.listOfEvents.reverse();** 
           },
           function getPostsFailure (error) {
             console.log('ERROR : home.ts : Failed retrieving Posts - ' + error);
            });