Rails маршрутизиране + AngularJS маршрутизиране

Имам следния код в моето ъглово приложение.

app.config(function($routeProvider, $locationProvider) {
   $locationProvider.html5Mode(true);
   $routeProvider
     .when("/users/:u_id/restaurants/:r_id/menus/:m_id/sections/:sec_id/items", { templateUrl: "/assets/menus/items.html", controller: "MenuItemCtrl" })
});

Работи добре, когато навигирам до пътя с помощта на

<a href="/bg./sections/{{section.id}}/items">View Items</a>

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

No route matches [GET] "/users/3/restaurants/3/menus/4/sections/4/items"

Ако създам този маршрут в routes.rb, той просто връща JSON, свързан с отговора, и не насочва към правилния шаблон.

Някой знае ли как да поправя този проблем?


person dgolman    schedule 08.04.2014    source източник
comment
Добавете catch all route в края на вашата конфигурация за маршрутизиране в Rails: get '(*url)' => 'home#index' В този пример методът index() на home_controller обслужва едностраничното приложение. Вижте този отговор за подробности.   -  person Sunil D.    schedule 09.04.2014


Отговори (1)


В маршрута на релсите трябва да пренасочите тази заявка към основния URL адрес на angular, така че angular да може да бъде изпълнен.

Без това релсите отговарят на заявката. Ето как работят html5mode маршрутите.

Редактиране:

Да приемем, че вашият angular се обслужва от application#home. Искате всички GET заявки да бъдат пренасочени към там, така че angular да може да работи.

Добавянето на този маршрут get '*path', to: 'application#home' ще направи всички GET заявки страницата angular.

person Papzord    schedule 08.04.2014
comment
Можете ли да предоставите пример, като използвате предоставения от мен код? Не разбирам напълно - person dgolman; 09.04.2014
comment
Това може да доведе до някои проблеми при извличане на JSON, но можете да добавите format: :html към маршрута. Освен това използването на режим hashbang вместо html5 е по-лесно. Този отговор може да ви пасне. stackoverflow .com/questions/16677528/ - person Papzord; 09.04.2014
comment
когато го направя, той просто продължава да ме пренасочва към тази страница, независимо от URL адреса, който въвеждам. - person dgolman; 09.04.2014
comment
Вярно е. Но сега ъгловите маршрути трябва да си свършат работата. - person Papzord; 10.04.2014