javascript - Angular ui-router动态地为所有状态添加解析功能

标签 javascript angularjs angular-ui-router

我正在尝试向我的应用程序中的每个状态添加一个解析器函数,以等待应用程序“启动”过程完成。我已经有以下代码:

angular.forEach($state.get(), function(state) {
  state.resolve = state.resolve || {};
  state.resolve.session = function() {
    return SessionResolver.handle(state);
  }
});

SessionResolver 是一种服务,其中 handle(state) 函数返回一个 promise ,一旦启动过程完成,该 promise 就会得到解决。

除非定义了一个没有现有 resolve 对象的状态,否则它工作正常。例如,以下状态将阻塞,直到 SessionResolver.handle promise 解决:

$stateProvider.state('dashboard', {
  url: "/",
  templateUrl: "dashboard.html",
  controller: "DashboardCtrl",
  resolve: {}
});

但如果未设置解析对象,则状态不会阻塞:

$stateProvider.state('dashboard', {
  url: "/",
  templateUrl: "dashboard.html",
  controller: "DashboardCtrl",
});

我宁愿不向我的每个状态添加一个空的 resolve 对象,因为我也可以在我处于状态时向它们添加 SessionResolver.handle resolve 函数。

除非解析对象已经存在,否则为什么动态添加解析函数到状态失败的任何想法?

最佳答案

我是这样解决问题的:

angular.module('sample', ['ui.router']).config(function($stateProvider) {
   var $delegate = $stateProvider.state;

   $stateProvider.state = function(name, definition) {
      definition.resolve = angular.extend({}, definition.resolve, {
         myCustomResolve: function() { return true; }
      });

      return $delegate.apply(this, arguments);
   };
   $stateProvider.state('example', { url: 'example/' });

}).run(function($state) { console.log('have resolve?', $state.get('example')); });

关于javascript - Angular ui-router动态地为所有状态添加解析功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24161988/

相关文章:

javascript - 如何使用 AngularJs ui-router 添加可选的 $stateParams?

javascript - 如何显示 x 轴 Highcharts 的第一个和最后一个标签

android - 高性能Web应用程序框架

javascript - 在 firebase 中访问嵌套的唯一键值

javascript - 在 Angular ui-router 中如何将事件从一个 View 发送到另一个 View ?

c# - 使用 angular-ui-router 避免 .NET MVC Controller 调用

javascript - 取消绑定(bind)并重新绑定(bind)点击css过渡结束

javascript - Jest.fn() 在 React 单元测试中不起作用

javascript - 如何为网站演示制作响应式面板切换选项?

javascript - Ng-table 不调用获取数据