正在刷新解析数据 - Ui 路由器
Refreshing Resolve Data - Ui Router
在 ionic 中,我在初始化控制器之前使用 Ui-路由器的 resolve
功能解析我的数据。截至目前,我不必 $inject
我的 EventService
进入控制器。 EventService
的 getEvents()
方法在控制器初始化之前解析数据。这样一切正常,但现在我正在尝试实施 Ion Refresher。我可以轻松地刷新控制器中的 $scope.events
数组,使控制器本身膨胀,因为我必须将 $inject
和 EventService
放入控制器中,这也意味着每个使用相同的数据必须包含处理刷新的逻辑。在控制器外部刷新数据的最佳方式是什么?还是最好的方式?
事件状态定义和数据解析
.state('tab.events', {
url: '/events',
views: {
'tab-event': {
templateUrl: 'views/events.html',
controller: 'EventsController',
resolve: {
events: function (EventService) {
return EventService.getEvents(); //resolves data before ctrl initialized
}
}
}
}
})
事件控制器
(function() {
'use strict'
angular
.module('app.events')
.controller('EventsController', EventsController);
EventsController.$inject = ['$scope','events'];
function EventsController ($scope,events) {
$scope.events = events;
}
}
)();
膨胀事件控制器 - 示例
(function() {
'use strict'
angular
.module('app.events')
.controller('EventsController', EventsController);
EventsController.$inject = ['$scope','events','EventsService'];
function EventsController ($scope,events,EventsService) {
$scope.events = events;
$scope.refresh = refresh;
function refresh () {
clearCache(); //pretend method
EventsService.getEvents()
.then(function (events) {
$scope.events = events;
$scope.$broadcast('scroll.refreshComplete');
})
}
}
}
)();
我可以用另一种方式刷新此数据而不是膨胀控制器吗?
调用 $state.reload()
,它是以下的别名:
$state.transitionTo($state.current, $stateParams, {
reload: true, inherit: false, notify: true
});
这将导致您的所有状态都变为 "re-entered",从而获取解析并重新初始化控制器。
我希望进行一次硬刷新,$state.reload() 所做的基本上不是答案。我也有这个问题,宁愿能够调用一些方法来强制所有已解析的数据对象重新运行。重新加载会导致页面刷新,从而导致令人讨厌的 UI 伪影。
在 ionic 中,我在初始化控制器之前使用 Ui-路由器的 resolve
功能解析我的数据。截至目前,我不必 $inject
我的 EventService
进入控制器。 EventService
的 getEvents()
方法在控制器初始化之前解析数据。这样一切正常,但现在我正在尝试实施 Ion Refresher。我可以轻松地刷新控制器中的 $scope.events
数组,使控制器本身膨胀,因为我必须将 $inject
和 EventService
放入控制器中,这也意味着每个使用相同的数据必须包含处理刷新的逻辑。在控制器外部刷新数据的最佳方式是什么?还是最好的方式?
事件状态定义和数据解析
.state('tab.events', {
url: '/events',
views: {
'tab-event': {
templateUrl: 'views/events.html',
controller: 'EventsController',
resolve: {
events: function (EventService) {
return EventService.getEvents(); //resolves data before ctrl initialized
}
}
}
}
})
事件控制器
(function() {
'use strict'
angular
.module('app.events')
.controller('EventsController', EventsController);
EventsController.$inject = ['$scope','events'];
function EventsController ($scope,events) {
$scope.events = events;
}
}
)();
膨胀事件控制器 - 示例
(function() {
'use strict'
angular
.module('app.events')
.controller('EventsController', EventsController);
EventsController.$inject = ['$scope','events','EventsService'];
function EventsController ($scope,events,EventsService) {
$scope.events = events;
$scope.refresh = refresh;
function refresh () {
clearCache(); //pretend method
EventsService.getEvents()
.then(function (events) {
$scope.events = events;
$scope.$broadcast('scroll.refreshComplete');
})
}
}
}
)();
我可以用另一种方式刷新此数据而不是膨胀控制器吗?
调用 $state.reload()
,它是以下的别名:
$state.transitionTo($state.current, $stateParams, {
reload: true, inherit: false, notify: true
});
这将导致您的所有状态都变为 "re-entered",从而获取解析并重新初始化控制器。
我希望进行一次硬刷新,$state.reload() 所做的基本上不是答案。我也有这个问题,宁愿能够调用一些方法来强制所有已解析的数据对象重新运行。重新加载会导致页面刷新,从而导致令人讨厌的 UI 伪影。