2016-03-29 4 views
0

Я пытаюсь создать приложение, содержащее несколько видов в качестве шаблона. Шаблоны находятся под папкой js/app/pages/. И у меня есть 2 шаблона для показа и маршрутизации. Мой раздел маршрутизации:Практическое руководство: Обновление маршрута Angularjs

var app = angular.module("myApp", ['ngRoute', 'ngMaterial']); 

app.config(function ($routeProvider, $locationProvider) { 
    $routeProvider 
    .when('/Page', { 
     templateUrl: 'js/app/pages/Page.html', 
     controller: 'pageController', 
     reloadOnSearch: false 
    }) 
    .when('/Settings', { 
     templateUrl: 'js/app/pages/Settings.html', 
     controller: 'settingsController', 
     reloadOnSearch: false 
    }) 
    .when('/Admin', { 
     templateUrl: 'js/app/pages/Admin.html', 
     controller: 'adminController', 
     reloadOnSearch: false 
    }) 
    .otherwise({ 
     redirectTo: '/Page' 
    }); 

    $locationProvider.html5Mode(true); 
}); 

И мой HTML-файл содержит

<div id="menu"></div> 
<div ng-view></div> 

Меню DIV содержит элементы меню, маршрут меня между страницами. Например, когда я запускаю этот сайт в браузере, URL-адрес будет localhost/Page, а когда я нажму кнопку URL-адреса кнопки настройки с помощью localhost/Settings. Но когда я нажимаю кнопку F5 на моей клавиатуре. Страница дает мне ошибку The resource cannot be found..

Я ищу в Интернете «как обновить страницу маршрутизации в angularjs» и найти некоторые решения, но я не мог заставить их работать для меня. Я пробовал $route.reload() и $routeUpdate() метод, но это не работает для меня. Может быть, я что-то не так.

ответ

0

Решенный! Мне не удалось обновить с помощью ngRoute. Затем я конвертирую его в ui-router. Я объявляю состояния по URL-адресам. И обновление работает. Спасибо за комментарии и ответы. Может быть, это поможет кому-то.

0

Когда вы «перезагружаете страницу», вы снова заново создадите приложение. Это означает, что если вы не на главной странице, а на субтрассе у вас отсутствуют некоторые данные, вы, скорее всего, получите сообщение об ошибке.

Вы должны смотреть в атрибут разрешить для маршрутов, так, например,

.when('/Settings', { 
     templateUrl: 'js/app/pages/Settings.html', 
     controller: 'settingsController', 
     reloadOnSearch: false, 
     resolve: { 
      resourceone: function(){return whatsneeedtoberesolvehere;} 
     } 
    }) 

таким образом, независимо от того, где вашего приложения перезагружается, он будет иметь необходимые данные для загрузки страницы

+0

Что такое whatsneedtoberesolvehere? это функция, которая разрешает, какой url я? или нет? можете ли вы добавить еще несколько деталей, пожалуйста? –

+0

вы должны разрешить любой ресурс, для которого вы получаете ошибку, здесь, как и в resourceone выше. то вы можете ввести это в любой контроллер и использовать его, как хотите на странице. –

0

На самом деле, когда вы нажимаете F5 с клавиатуры, он нажимает на ваш сервер для этой страницы, а не угловат, потому что у вас нет знака # между вашим URL. Для углового, URL должен быть вроде как - localhost/#/Page

+0

Я не понял знака «#». Можете ли вы добавить еще несколько деталей. –

0

Использование html5mode

Большая статья об этом here

Инициализировать его очень просто

.config(function($routeProvider, $locationProvider) { 

    // other routes here 

    $locationProvider.html5Mode(true); 

}); 
+0

о, вы уже используете его, хорошо, статья все еще хороша. удачи –

+0

да, я уже использую его, спасибо за рекомендацию. –

1

Если вы используете сервер Apache, это должно работать в этом терминале

sudo a2enmod rewrite && sudo service apache2 restart 

works for me

+0

Нет, я использую iis. Не сервер Apache. Спасибо –

0

Просто сохраните # в URL-адресе, вам не нужно прикладывать дополнительные усилия для управления перезагрузками и т. Д., Вы можете подумать, что «#» в URL-адресе представляет собой конкретное состояние в одностраничном приложении.

В противном случае он может управляться путем перезаписи модулей, которые отображают URL-адрес с хешированным URL-адресом версии для приложения AngularJs.

+0

, вы имеете в виду URL-адрес, например «localhost/#/Page» или «localhost/#/Settings». это правильно? –

Смежные вопросы