【问题标题】:Ui Router Resolve - Cancel State Controller Load Afterwards?Ui Router Resolve - 之后取消状态控制器加载?
【发布时间】:2014-10-04 16:21:17
【问题描述】:

Angular UI 路由器问题

resolve 块中激活$state.go("main.loadbalancer.readonly"); 时,main.loadbalancer.vips 状态控制器VipListCtrl(仅限控制器)在解析后仍会加载。

既然状态main.loadbalancer.readonly被激活了,我怎样才能让控制器VipListCtrl取消而不加载呢?

我尝试使用一个 Promise,但从来没有解决这个 Promise,但是 UI 路由器似乎永远停留在这个解决方案上。

angular.module("main.loadbalancer", ["ui.bootstrap", "ui.router"]).config(function($stateProvider) {
  return $stateProvider.state("main.loadbalancer", {
    url: "device/:id",
    views: {
      "content@": {
        templateUrl: "loadbalancer/loadbalancer.html",
        controller: "LoadBalancerCtrl"
      }
    }
  }).state("main.loadbalancer.vips", {
    resolve: {
        isDeviceReadOnly: function($state) {
        if (!$state.current.data['deviceId']) {
          $state.go("main.loadbalancer.readonly"); //THIS IS RAN...NEED CONTROLLER
                                                   //VipListCtrl TO NOT RUN AFTERWARDS
        }
      }
    },
    url: "/vips",
    templateUrl: "loadbalancer/vip-table.html",
    controller: "VipListCtrl"
  }).state("main.loadbalancer.nodes", {
    url: "/nodes",
    templateUrl: "loadbalancer/node-table.html",
    controller: "NodeListCtrl"
  }).state("main.loadbalancer.admin", {
    url: "/admin",
    templateUrl: "loadbalancer/admin.html",
    controller: "AdminCtrl"
  }).state("main.loadbalancer.readonly", {
    url: "/readonly",
    templateUrl: "loadbalancer/readonly.html",
    controller: "ReadonlyCtrl"
  });
});

【问题讨论】:

    标签: angularjs angular-ui-router


    【解决方案1】:
     resolve: {
            isDeviceReadOnly: function($state, $q, $timeout) {
            if (!$state.current.data['deviceId']) {
              $timeout(function() { $state.go("main.loadbalancer.readonly"); });
              return $q.reject("rejection message"); // <-- Gotta reject your resolve
            }
          }
        },
    

    plunk 演示 $q.reject 取消转换:http://plnkr.co/edit/njJtyVbKD4rDY3OckAF6?p=preview

    【讨论】:

    • 我不相信 $q.reject() 会取消控制器的运行。我认为它只是让 UI 路由器处于挂起状态,其中解析永远不会完成并等待。
    • 确实如此。上面缺少的是包装在 $timeout 中:plnkr.co/edit/njJtyVbKD4rDY3OckAF6?p=preview 已编辑答案。
    猜你喜欢
    • 2015-11-10
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 2015-03-23
    相关资源
    最近更新 更多