angular ui-router on back press TypeError: a.indexOf is not a function
angular ui-router on back press TypeError: a.indexOf is not a function
我正在开发 Angular 1.6.1 网络应用程序,其中安装了 Angular Material 和 ui-router 模块。
从一个状态导航到另一个状态工作正常,但是当按下浏览器后退按钮时,URL 正在改变但状态没有改变(视图保持不变)!我在控制台日志中收到以下错误:
TypeError: a.indexOf is not a function
at f (angular.js:438)
at m (angular.js:438)
at Object.z.transitionTo (angular.js:438)
at Array.<anonymous> (angular.js:438)
at Object.invoke (angular.js:39)
at g (angular.js:438)
at angular.js:438
at b (angular.js:438)
at n (angular.js:438)
at m.$broadcast (angular.js:146)
$stateChangeStart
还没有达到
所以浏览器历史记录堆栈似乎发生了一些变化。
几天前一切正常,从那以后没有任何改变(好吧,根据我的 git 日志)。
我的 $stateProvider
配置分为不同的文件,第一个文件如下所示:
$stateProvider
//Main states
.state('main', {
abstract: true,
controller: 'MainController',
template: '<div ui-view flex layout="column"></div>'
})
.state('null', {
parent: 'main',
url: '/',
controller: function($state){
$state.go('login', {}, {location: "replace", reload: true});
}
})
//main loggedin state loading main loggedin view
.state('logged-in', {
parent: 'main',
abstract: true,
templateUrl: COMP_DIR + 'core/logged-in/logged-in.view.html',
controller: 'LoggedInController',
controllerAs: 'vm'
})
.state('no-enterprise', {
parent: 'logged-in',
abstract: true,
template: '<div ui-view flex layout="column"></div>',
controller: 'NoEnterpriseController'
})
在此配置之后,我为应用程序的每个模块添加了几个路由文件。之后我像这样添加最后一个路由文件:
$stateProvider
//main enterprise state
.state('enterprise', {
parent: 'logged-in',
url: '/{slug}',
controller: 'EnterpriseController',
controllerAs: 'vm',
template: '<div ui-view flex layout="column"></div>'
})
//states inside enterprise state
.state('dashboard', {
url: '/',
parent: 'enterprise',
title: 'Dashboard',
templateUrl: COMP_DIR + 'dashboard/dashboard.index.view.html',
controller: 'Dashboard.DashboardController',
controllerAs: 'vm'
})
通过向元素添加一个简单的 ui-sref
来触发状态更改并且工作正常,但我无法使用浏览器的后退按钮返回。
有没有人知道为什么会弹出此错误,因此后退按钮无法正常工作?
提前致谢!
编辑:此外,当我刷新应用程序(按 F5)时,后退按钮一直有效,直到我向前导航一步,然后我在历史堆栈中尝试向前导航时遇到同样的错误。
我解决了这个问题。 $rootScope.$on('$stateChangeSuccess', function (event, toState, toParams) {}
函数出错。
我试图将 toState.name
与未定义的内容进行比较。
这很奇怪,因为错误发生在状态更改之前。因此,如果您在更改状态时遇到错误,请务必检查您的 $stateChangeSuccess
事件处理程序 ;)
我正在开发 Angular 1.6.1 网络应用程序,其中安装了 Angular Material 和 ui-router 模块。
从一个状态导航到另一个状态工作正常,但是当按下浏览器后退按钮时,URL 正在改变但状态没有改变(视图保持不变)!我在控制台日志中收到以下错误:
TypeError: a.indexOf is not a function
at f (angular.js:438)
at m (angular.js:438)
at Object.z.transitionTo (angular.js:438)
at Array.<anonymous> (angular.js:438)
at Object.invoke (angular.js:39)
at g (angular.js:438)
at angular.js:438
at b (angular.js:438)
at n (angular.js:438)
at m.$broadcast (angular.js:146)
$stateChangeStart
还没有达到
所以浏览器历史记录堆栈似乎发生了一些变化。
几天前一切正常,从那以后没有任何改变(好吧,根据我的 git 日志)。
我的 $stateProvider
配置分为不同的文件,第一个文件如下所示:
$stateProvider
//Main states
.state('main', {
abstract: true,
controller: 'MainController',
template: '<div ui-view flex layout="column"></div>'
})
.state('null', {
parent: 'main',
url: '/',
controller: function($state){
$state.go('login', {}, {location: "replace", reload: true});
}
})
//main loggedin state loading main loggedin view
.state('logged-in', {
parent: 'main',
abstract: true,
templateUrl: COMP_DIR + 'core/logged-in/logged-in.view.html',
controller: 'LoggedInController',
controllerAs: 'vm'
})
.state('no-enterprise', {
parent: 'logged-in',
abstract: true,
template: '<div ui-view flex layout="column"></div>',
controller: 'NoEnterpriseController'
})
在此配置之后,我为应用程序的每个模块添加了几个路由文件。之后我像这样添加最后一个路由文件:
$stateProvider
//main enterprise state
.state('enterprise', {
parent: 'logged-in',
url: '/{slug}',
controller: 'EnterpriseController',
controllerAs: 'vm',
template: '<div ui-view flex layout="column"></div>'
})
//states inside enterprise state
.state('dashboard', {
url: '/',
parent: 'enterprise',
title: 'Dashboard',
templateUrl: COMP_DIR + 'dashboard/dashboard.index.view.html',
controller: 'Dashboard.DashboardController',
controllerAs: 'vm'
})
通过向元素添加一个简单的 ui-sref
来触发状态更改并且工作正常,但我无法使用浏览器的后退按钮返回。
有没有人知道为什么会弹出此错误,因此后退按钮无法正常工作?
提前致谢!
编辑:此外,当我刷新应用程序(按 F5)时,后退按钮一直有效,直到我向前导航一步,然后我在历史堆栈中尝试向前导航时遇到同样的错误。
我解决了这个问题。 $rootScope.$on('$stateChangeSuccess', function (event, toState, toParams) {}
函数出错。
我试图将 toState.name
与未定义的内容进行比较。
这很奇怪,因为错误发生在状态更改之前。因此,如果您在更改状态时遇到错误,请务必检查您的 $stateChangeSuccess
事件处理程序 ;)