如何列出最近创建的Feed中的帖子?

时间:2017-06-05 20:15:11

标签: javascript angular ionic2 angularjs-orderby

我使用Onymos作为我的后端。当我从onymos中提取数据时,它会给我一个"安排"我可以指定的属性" createdTime"然而,作为价值,由于某种原因,这不会转移到我的模板。我不认为我的谷歌搜索引起了角度指令。所以我不确定我还能在模板中订购这个。 我的服务将一个数组传递给一个回调函数,该函数在主TS页面的contstructor中触发。 我对此表示赏心悦目,因为有人提供的第一个解决方案并没有为我工作..导致错误。

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

3 个答案:

答案 0 :(得分:2)

按客户端排序:

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
    });

}

答案 1 :(得分:0)

这里找到的数组反向方法最适合我: 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);
            });

答案 2 :(得分:-1)

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

    来执行此操作

    event.createdTime = moment().valueOf()

  • 其他用户建议的客户端排序是在没有服务器排序的情况下进行的。但是,通过插入并保持数组同时排序,可以使其更加优化。

您可以使用underscore库(或自己编写)来查找推送位置的索引,并使用以下函数代替普通push

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