Javascript 角度UI路由器重定向到默认页面

Javascript 角度UI路由器重定向到默认页面,javascript,angularjs,ionic-framework,routes,Javascript,Angularjs,Ionic Framework,Routes,我有一个模块化的应用程序,其中我将路由拆分为多个文件 所以我的系统是 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的login文件夹和一个带有register.html的register文件夹

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

所以我的系统是

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的login文件夹和一个带有register.html的register文件夹

主模块文件如下所示

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('User', ['User.Controllers', 'User.Services', 'User.Routes']);
主路由文件包含

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

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

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

   $urlRouterProvider.otherwise('/');
});
Main.Module.js注入了这两个东西,以及js文件看起来像这样的用户模块

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('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页面。所以我的问题是我需要知道为什么状态没有停留在register页面,而是立即移动到main.html页面。注册页面是页面历史堆栈的一部分,因为在测试期间,我可以通过硬件后退按钮或按下chrome上的后退按钮“返回”到它。我尝试将路由移回主路由文件,而不注入用户路由,但它产生了相同的结果

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

设置一个
否则

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

        });

设置
否则

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

        });

我明白我做错了什么。在我有按钮的位置,该按钮应该将我带到注册页面以及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>

我知道我做错了什么。在我有按钮的位置,该按钮应该将我带到注册页面以及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>


执行
console.log($state.href(“Register”))
并告诉我们您得到了什么?#/user/Register从Register控制器执行操作时,如果我直接从地址栏转到该url,我没有问题。只是当我尝试从登录页面重定向它时,它是否有此问题如果您可以捕获
$stateChangeError
或其他相关事件,并查看是否有任何错误,除非我做错了,否则不会抛出任何错误。我添加了$rootScope.$on(“$stateChangeError”,函数(event,toState,toParams,fromState,fromParams,error){e.preventDefault();console.log(error)});什么也没有出现。路由甚至会加载控制器,因为它会在返回到登录页面或主页之前运行我在其中的任何js。执行
console.log($state.href(“Register”))
并告诉我们您得到了什么?#/user/从RegisterController完成注册后,如果我直接从地址栏转到该url,我没有问题。只是当我尝试从登录页面重定向它时,它是否有此问题如果您可以捕获
$stateChangeError
或其他相关事件,并查看是否有任何错误,除非我做错了,否则不会抛出任何错误。我添加了$rootScope.$on(“$stateChangeError”,函数(event,toState,toParams,fromState,fromParams,error){e.preventDefault();console.log(error)});什么也没有出现。路由甚至会加载控制器,因为在返回登录页面或主页之前,它会运行我在其中的任何js。这并没有解决我的问题,我以前也试过。这并没有解决我的问题。