问题背景:
我遇到了我正在实施的AngularJS的一个常见问题:
$locationProvider.html5Mode({ enabled: true, requireBase: false });
这已经删除了#'#'从我的URL路由,然后导致404错误。我通过调整web.config来修复它,现在页面重新加载。
问题:
我有2个名为Home.html
和Results.html
的观点。我还有一个index.html,它包含在我的应用程序中,其中包含注册了主页和结果视图的<div ui-view>
。
以下是使用的路线:
http://localhost:5XXXX/ - home
http://localhost:5XXXX/results - results
我想在刷新results.html时重定向到home.html视图。目前,当刷新results.html时,所有y作用域数据都会随指令中的jquery插件对象状态一起丢失。
守则:
app.js - 这里有app的路线:
angular
.module('app', [
'ui.router',
'ui.bootstrap',
'ngAnimate',
'ngResource',
'rzModule',
'angular-ladda',
'jcs-autoValidate'
])
.config(['$urlRouterProvider', '$stateProvider', '$locationProvider', function ($urlRouterProvider, $stateProvider, $locationProvider) {
$urlRouterProvider.otherwise('/');
$stateProvider
.state('home', {
url: '/',
templateUrl: 'home.html',
controller: 'HomeController'
})
$stateProvider.state('results', {
url: '/results',
templateUrl: 'Results.html',
controller: 'ResultsController'
})
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
}]);
ResultsController.js:
var app = angular.module('app');
app.controller('ResultsController', function ($scope, $rootScope, $timeout, $location, $anchorScroll, $window, searchService) {
//code
});
如果我刷新Results.html
页面,我如何立即重定向到Home.html
视图,而不是重新加载Results.html
页?
修改
我已使用以下内容更新了ResultsController.js,但这个代码似乎没有在重新加载时调用,它不会重定向到主页。
var app = angular.module('app');
app.controller('ResultsController', function ($scope, $rootScope, $timeout, $location, $anchorScroll, $window, searchService) {
$rootScope.$on('$locationChangeStart', function (event) {
$state.go('/');
});
});
另外要添加我已将以下内容添加到我的应用程序的Web.config中以处理重新路由:
<rewrite>
<rules>
<rule name="AngularJS" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/" />
</rule>
</rules>
</rewrite>
答案 0 :(得分:2)
使用$ locationChangeStart
$rootScope.$on('$locationChangeStart', function(event) {
$state.go('/');
});
正确代码:$ locationChangeStart 运行
把它放在主应用程序文件中并将其附加到应用程序,如app.config,就像app.run()
.run(['$rootScope', '$state', function($rootScope, $state, userService) {
$rootScope.$on("$locationChangeStart", function(event, next, current) {
if(next == current) {
event.preventDefault();
$state.transitionTo('/');
}
});
}]);
答案 1 :(得分:1)
一些伪代码
var app = angular.module('app');
app.controller('ResultsController', function ($scope, $rootScope, $timeout, $location, $anchorScroll, $window, searchService, $state) {
if (data unavailable) {
$state.go('home');
}
});
如果您的结果数据不可用,请执行$ state.go(&#39; home&#39;);在ResultsController
答案 2 :(得分:1)
看起来已在此处回答:How to redirect on different view on refresh in AngularJS?
$rootScope.$on("$locationChangeStart", function(event, next, current) {
if(next==current && next=='/results')
event.preventDefault();
$state.go('home');
});