Javascript AngularJS UI路由器0.X在初始应用程序加载时发出获取要触发的if语句
JS: 参考最后一条if/else语句: 如果当前路由名称不在数组中,则只需隐藏/显示元素。它工作得很好,但它不会在初始应用程序加载时运行。示例:Javascript AngularJS UI路由器0.X在初始应用程序加载时发出获取要触发的if语句,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,JS: 参考最后一条if/else语句: 如果当前路由名称不在数组中,则只需隐藏/显示元素。它工作得很好,但它不会在初始应用程序加载时运行。示例: 在应隐藏元素的页面上打开应用程序,但会显示该元素 在同一页上刷新,元素仍然显示 导航到另一个页面,它就能完美地工作 如何使这个特定的if/else语句每次运行时都不会出错,即使在页面刷新时也是如此 旁注:我必须以这种方式动态执行,因为所讨论的元素是通过JS依赖项动态插入的。您是否通过控制台日志或断点来查看这是否在重新加载页面时运行?这是在运行块还
- 在应隐藏元素的页面上打开应用程序,但会显示该元素
- 在同一页上刷新,元素仍然显示
- 导航到另一个页面,它就能完美地工作
旁注:我必须以这种方式动态执行,因为所讨论的元素是通过JS依赖项动态插入的。您是否通过控制台日志或断点来查看这是否在重新加载页面时运行?这是在运行块还是配置块中,或者两者都不在?您是否尝试过对第二条if语句使用
$stateChangeSuccess
?当触发$stateChangeStart
时,DOM元素甚至不应该存在,因此它在导航时工作的事实有点令人惊讶。这段代码包含在哪里?如果在重新加载时触发$stateChangeStart
之前未定义观察程序,它显然不会捕获事件。如果要避免状态可见,请向解析函数返回拒绝的承诺,以中止状态模板的加载。使用document.querySelector
是一个大问题的症状。
app.run(['$rootScope', '$http', '$state', 'segment',
function run($rootScope, $http, $state, segment) {
let publicStates = [
'register',
'forgotPassword',
'passwordreset',
'login',
];
// Add JWT token as default auth header.
$http.defaults.headers.common.Authorization = 'Bearer ' +
window.localStorage.getItem('userToken');
// Check that user is logged in.
$rootScope.$on('$stateChangeStart', function(event, toState) {
$rootScope.$state = toState;
if (!window.localStorage.getItem('userToken') &&
publicStates.indexOf(toState.name) === -1) {
event.preventDefault();
$state.go('login');
}
if (publicStates.indexOf(toState.name) === -1) {
angular.element(document.querySelector('#gs')).css('visibility', 'visible');
} else {
angular.element(document.querySelector('#gs')).css('visibility', 'hidden');
}
});
$rootScope.$on('$stateChangeSuccess',
function(event, toState, toParams, fromState) {
segment.page(toState.name, {
path: toState.name,
referrer: fromState.url,
url: toState.url,
});
});
}]);