Как перенаправить на другой вид при обновлении в AngularJS?

я разрабатываю приложение в AngularJS. По сути, у меня есть «домашняя» страница и «новый проект». На главной странице у меня есть меню со ссылкой на «новый проект».

Я настроил $stateProvider следующим образом:

$stateProvider.state('home', {
    url: '/',
    templateUrl: 'partials/home.jsp'
}).state('newproject', {
    url: '/newproject',
    templateUrl: 'partials/new-project.html'
})

Итак, когда я захожу в приложение, я на главной странице. Затем я нажимаю ссылку «новый проект», и я нахожусь на странице «новый проект». Теперь URL-адрес http://myapp/newproject

Моя проблема в том, что когда я обновляю страницу, я хочу, чтобы меня перенаправили на домашнюю страницу, даже если URL-адрес в строке моего браузера все еще http://myapp/newproject

Как я могу этого добиться?

ОБНОВЛЕНИЕ:

Большое спасибо squiroid за ответ. Я использовал второе решение, и оно сработало как шарм. Небольшое уточнение, на случай, если у кого-то возникнет такая же проблема, перед перенаправлением домой вы должны предотвратить работу по умолчанию. Итак, правильный рабочий код:

$rootScope.$on("$locationChangeStart", function(event, next, current) { 

if(next==current && next=='/newproject')
    event.preventDefault();
    $state.go('home');

});


person user1840039    schedule 21.01.2015    source источник


Ответы (1)


Используйте это в своем контроллере «newproject», он прослушивает ваше обновление:

$rootScope.$on('$locationChangeStart', function(event) {
     $state.go('home');
});

или поместите это в app.run();

$rootScope.$on("$locationChangeStart", function(event, next, current) { 

    if(next==current && next=='/newproject')
        $state.go('home');

});
person squiroid    schedule 21.01.2015
comment
Добро пожаловать, пожалуйста, отметьте это и проголосуйте, если вы удовлетворены :-) И +1 для event.preventDefault(), я забыл. - person squiroid; 22.01.2015
comment
отмечено! извините, я не могу проголосовать из-за очков репутации (мне ‹ 15) - person user1840039; 22.01.2015
comment
Это прекрасно, приятно помочь вам. - person squiroid; 22.01.2015
comment
Первый вариант у меня не сработал, второй вариант работает с $location.url(/Home) вместо вызова $state. - person downhand; 18.08.2015
comment
Работал как шарм. Пришлось использовать $location.url вместо $state.go в моем конкретном случае, но в паре с event.preventDefault(). Спасибо. - person Gaege; 06.01.2016