【问题标题】:Refreshing Resolve Data - Ui Router刷新解析数据 - Ui 路由器
【发布时间】:2015-12-13 13:00:58
【问题描述】:

在 ionic 中,我在控制器初始化之前使用 Ui-Router 的 resolve 功能解析我的数据。截至目前,我不必将$inject 我的EventService 加入控制器。 EventServicegetEvents() 方法在控制器初始化之前解析数据。一切都以这种方式正常工作,但现在我正在尝试实现Ion Refresher。我可以轻松地在控制器中刷新我的 $scope.events 数组,从而使控制器本身膨胀,因为我必须将 $injectEventService 放入控制器中,这也意味着使用相同数据的每个控制器都必须包含处理刷新的逻辑。刷新控制器外部数据的最佳方式是什么,还是最好的方式?

事件状态定义和数据解析

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

}
)();

我可以用另一种方式刷新这些数据,而不是让控制器膨胀?

【问题讨论】:

    标签: angularjs ionic-framework angular-ui-router ionic


    【解决方案1】:

    调用$state.reload(),它是以下的别名:

    $state.transitionTo($state.current, $stateParams, { 
      reload: true, inherit: false, notify: true
    });
    

    这将导致您的所有状态都被“重新输入”,从而获取解析并重新初始化控制器。

    【讨论】:

    • 赞成,因为在发布后我看到了您的解决方案,但我尝试了它并遇到了问题。我会再试一次,重现问题后返回。
    【解决方案2】:

    我希望进行一次硬刷新,这基本上是 $state.reload() 所做的不是答案。我也有这个问题,宁愿能够调用一些方法来强制所有已解析的数据对象重新运行。重新加载会导致页面刷新,从而导致令人讨厌的 UI 工件。

    【讨论】:

      猜你喜欢
      • 2017-10-29
      • 1970-01-01
      • 2016-12-05
      • 2018-10-16
      • 2016-03-21
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多