最近開發一個混合即時通訊項目,有這樣一個場景,當用戶已經有很多條聊天記錄後,再次進入後,需要顯示所有的記錄,然後自動滾動到底部。
滾動到底部實現起來比較簡單,$ionicScrollDelegate就可以實現,但是angular的ng-repeat渲染是需要一段時間的,也就是說們需要知道什麼時候ng-repeat纔會渲染完成,才能真正滾動到頁面底部。
研究了一下找到了一個解決方案:
爲了達到複用的目的,我們需要寫一個direcitve,上代碼:
'use strict';
// @ngInject
module.exports = function enterAction() {
return {
restrict: 'A',
link: function (scope, element, attr) {
if (scope.$last === true) {
scope.$eval(attr.finishRender);
}
},
};
};
上面的代碼中scope.$last就是用來判斷是否是最後一天記錄被渲染,實話講,angular爲開發想到的語法糖真得是很多。
判斷好最好一個後,需要通知一個事件,用到的就是$eval這個方法,其主要作用就是, 可計算某個字符串,並執行其中的的 JavaScript 代碼。
那麼如何使用呢:
<ion-list>
<ion-item ng-repeat="msgItem in chat.messageList" finish-render="finishRender()">
</ion-item>
</ion-list>
之後,我麼在control中聲明一個finisheRender()的方法就會被調用了。
so easy!!!!!!