gpt4 book ai didi

javascript - angular ui 路由器的第一个状态为 `name: "“`

转载 作者:行者123 更新时间:2023-11-29 21:57:43 25 4
gpt4 key购买 nike

我是 Angular 的新手,我正在尝试使用 Angular UI 路由器。当我导航到 / 时,我得到这个抽象状态作为我的 $state.current: Object {name: "", url: "^", views: null ,摘要:真。无论如何,我的当前状态是 files 吗?这是我的代码:

(function() {
'use strict';

angular.module('carton', [
'ui.router',
'carton.controllers',
'carton.services',
'carton.directives'
]).
config([
'$stateProvider',
'$urlRouterProvider',
function(
$stateProvider,
$urlRouterProvider
) {
$urlRouterProvider.otherwise('/');
$stateProvider.
state('files', {
url: '/',
templateUrl: 'partials/files.html',
//controller: 'FilesCtrl'
access: {
isFree: false
}
}).

state('login', {
url: '/login',
templateUrl: 'partials/login.html',
controller: 'loginCtrl',
access: {
isFree: true
}
}).

state('register', {
url: '/register',
templateUrl: 'partials/register.html',
//controller: 'RegisterCtrl'
access: {
isFree: true
}
});

}
])

.run(['$rootScope', '$state', 'UserService',
function($root, $state, userSrv) {
$root.$on(
'$locationChangeSuccess',
function(event) {
console.log($state.current);
if (!$state.current.access.isFree && !userSrv.isLogged) {
$state.go('login');
}
}
)
}
]);
})();

最佳答案

我创建了一个 plunker ,应该显示如何。该解决方案的两个主要部分如下所述。

我们可以在状态定义上使用一些特殊设置,但它们必须嵌套在 data 对象中。查看:

Attach Custom Data to State Objects

调整后的 state def 将是:

state('files', { 
...
data: { // here we do nest the custom setting into "data"
access: {
isFree: false
}
}
})

.state('login', {
...
data: {
access: {
isFree: true
}
}
})

此外,更适合监听的事件$rootScope.$on('$stateChangeStart', ..。这里是一个如何做到这一点的例子:

这可能是我们案例中的实现:

.run(['$rootScope', '$state', 'UserService',
function($root, $state, userSrv) {

$root.$on('$stateChangeStart', function(event, toState
, toParams, fromState, fromParams) {

var isLoginState = toState.name === "login";
if (isLoginState) {
return;
}

var shouldRequireLogin = !userSrv.isLogged
&& !toState.data.access.isFree;
if (shouldRequireLogin) {

event.preventDefault()
$state.go('login');
}
})
}
])

有一个working example (注册登录始终可用,文件仅在登录时可用)

关于javascript - angular ui 路由器的第一个状态为 `name: "“`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25517811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com