我如何按最近创建的列表列出提要中的帖子?
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);
});
我的后端使用 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);
});