【问题标题】:Angular UI Router redirecting to default pageAngular UI路由器重定向到默认页面
【发布时间】:2016-07-21 20:35:02
【问题描述】:

我有一个模块化应用程序,我将路由拆分为多个文件。

所以我的系统是。

Top
--Main.Module.js
--Main.Routes.js
--Main.Controllers.js
--Main.html
--user (folder)
----User.Module.js
----User.Routes.js
----User.Controllers.js

在用户文件夹中,我有一个带有 Login.html 的登录文件夹和一个带有 Register.html 的注册文件夹

主模块文件如下所示

angular.module('Main', ['ionic', 'Main.Routes', 'Main.Controllers', "User"])

  .run(function($ionicPlatform) {
    $ionicPlatform.ready(function() {
      // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
      // for form inputs)
      if (window.cordova && window.cordova.plugins.Keyboard) {
        cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
        cordova.plugins.Keyboard.disableScroll(true);

      }
      if (window.StatusBar) {
        // org.apache.cordova.statusbar required
        StatusBar.styleDefault();
      }
    });
  });

主路由文件包含

angular.module('Main.Routes', [])

.config(function($stateProvider, $urlRouterProvider) {
  $stateProvider

    .state('Loader', {
      url: '/',
      templateUrl: '/views/Main.html',
      controller: 'MainController'
    });

   $urlRouterProvider.otherwise('/');
});

而 Main.Module.js 注入了这两个东西以及 js 文件看起来像这样的 User 模块

angular.module('User', ['User.Controllers', 'User.Services', 'User.Routes']);

用户路由文件有登录页面和注册页面的路由

angular.module('User.Routes', [])

.config(function($stateProvider) {
  $stateProvider

    .state('Login', {
      url: '/user/login',
      templateUrl: 'views/user/login/Login.html',
      controller: 'LoginController'
    })

    .state('Register', {
      url: '/user/register',
      templateUrl: 'views/user/register/Register.html'

    });



  // if none of the above states are matched, use this as the fallback


});

当我从主控制器执行 $state.go("Login") 时,它会将我带到登录页面,没有任何问题。但是我在登录页面上有一个与这段代码相关联的注册按钮

//Move user to the register page
  $scope.registerClick = function(){
    $state.go("Register");
  }

这会将我重定向到注册页面大约半秒钟,然后立即将其踢回主 html 页面。所以我的问题是我需要知道为什么状态不停留在注册页面并立即移动到 main.html 页面。注册页面是页面历史堆栈的一部分,因为我可以在测试期间使用硬件后退按钮或按下 chrome 来“返回”它。我尝试将路由移回主路由文件,而不是注入用户路由,但它产生了相同的结果。

==============编辑============= 应用程序加载后,如果我将主页更改为注册页面后转到的页面并将链接添加回登录页面,则不会发生此行为。我只是对有什么不同感到困惑。

【问题讨论】:

  • 发送console.log($state.href("Register")) 并告诉我们你得到了什么?
  • #/user/register 当从 RegisterController 完成时
  • 如果我直接从地址栏转到该网址,我没有问题。只是当我尝试从登录页面重定向它时是否有这个问题
  • 如果你能捕捉到$stateChangeError或其他相关事件,看看你那里有没有错误
  • 除非我做错了它不会抛出任何错误。我添加了 $rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error){ e.preventDefault(); console.log(error) });什么也没出现。该路由甚至会加载控制器,因为它会在返回登录页面或主页之前运行我在那里拥有的任何 js。

标签: javascript angularjs ionic-framework routes


【解决方案1】:

设置otherwise

.config(function($stateProvider, $urlRouterProvider) {
            $urlRouterProvider.otherwise('/defaultpage');
        .state('login', {
                    url: '/login',
                    templateUrl: 'templates/template.html',
                    controller: 'Ctrl'
                })
        .otherstates etc....

        });

【讨论】:

  • 我以前试过这个。它没有解决我的问题。
【解决方案2】:

我明白我做错了什么。在我的按钮应该带我到 ng-click 指令旁边的注册页面的位置,我也有一个 href 指令设置为 #。谢谢大家的意见。

有问题的线

<a href="#" ng-click="registerClick()" class="button button-light  button-block button-clear ">Create an account</a>

应该是这样的

<a href="#" ng-click="registerClick()" class="button button-light  button-block button-clear ">Create an account</a>

【讨论】:

    猜你喜欢
    • 2014-12-23
    • 1970-01-01
    • 2018-02-14
    • 2021-02-22
    • 2017-07-27
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多