angularjs - 如何知道 ui-router 中的下一个状态

标签 angularjs angular-ui-router

当用户进入特定状态( /login )时,我会显示和隐藏模式,但如果用户进入 /register,我会将模式保留在后台来自 /login .

如果用户在/login然后转到 /register ,我希望登录模式保持打开状态,而如果用户在 /login然后转到另一个页面,我会让登录模式消失。

实际上我设置了Angular-ui-router $stateProvider这样:

app.config(function ($stateProvider, $urlRouterProvider, $locationProvider) {
  $stateProvider
    .state('home', {
      url: "/",
      templateUrl: "templates/home.html",
      controller: 'HomeCtrl'
    })
    .state('login', {
      url: "/login",
      onEnter: function ($stateParams, $state, Modal) {
        // * modalCtrl for Login
        if (window.loginModal) {
          window.loginModal.remove();
          delete window.loginModal;
          Modal.fromTemplateUrl('templates/user/login.html', function (modal) {
            window.loginModal = modal;
            loginModal.show();
          });
        } else {
          Modal.fromTemplateUrl('templates/user/login.html', function (modal) {
            window.loginModal = modal;
            loginModal.show();
          });
        }
      },
      onExit: function ($stateParams, $state) {
        if ( window.loginModal && /* condition like "!nextState.is('register')" */ ) {
          window.loginModal.hide();
        }
      }
    })
    .state('register', {
      url: "/register",
      onEnter: function ($stateParams, $state, Modal, SlideBoxDelegate) {
        // * modalCtrl for Register
        if (window.registerModal) {
          window.registerModal.remove();
          delete window.registerModal;
          Modal.fromTemplateUrl('templates/user/register.html', function (modal) {
            window.registerModal = modal;
            SlideBoxDelegate.update();
            registerModal.show();
          });
        } else {
          Modal.fromTemplateUrl('templates/user/register.html', function (modal) {
            window.registerModal = modal;
            SlideBoxDelegate.update();
            registerModal.show();
          });
        }
      },
      onExit: function ($stateParams, $state) {
        if ( window.registerModal ) {
          window.registerModal.hide();
        }
      }
    })
    .state('not_found', {
      url: "/not_found",
      templateUrl: 'templates/not_found.html',
      controller: 'NotFoundCtrl'
    })
  $urlRouterProvider.otherwise("/not_found");
  $locationProvider.html5Mode(true);
})

有没有办法设置condition like "!nextState.is('register')" ?

感谢您阅读:)

最佳答案

您可以收听$stateChangeStart并注意 to 的值参数 onExit 可以访问的某个位置函数,即可注入(inject)的值或服务。

将来,将有一个可注入(inject)的服务来代表转换本身,您将能够检查和操作此类事情。

关于angularjs - 如何知道 ui-router 中的下一个状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21068002/

相关文章:

angularjs - Angular JS : Controller not working

javascript - Angular ui-router 动态参数仅适用于特定子状态

angularjs - ionic $state.go 重定向在单击之前无法正确加载 ui

javascript - 在 AngularJS 中如何从一个 Controller 重定向到另一个 Controller ?

javascript - Angular JS UI 路由器不工作

javascript - 突出显示行 angularjs 中的过滤元素

javascript - 为什么我收到 TypeError : onSuccess is not a function in my angularjs service

javascript - 保存并获取 Firebase 集合中项目的 $priority AngularFire 0.6.0

javascript - 在 AngularJS 中重置表单

javascript - UI 路由器未按预期工作(嵌套 View !)