2016-01-11 9 views
1

Я пытаюсь комбинировать угловые объекты с fullpage.js на index.page. Кроме того, все еще есть некоторые страницы, которые обычно отображаются по маршруту.angularjs с привязкой и маршрутизацией fullpage.js (комплекс)

Вот мой маршрут в app.js

app.config(['$routeProvider', '$httpProvider', '$locationProvider', function($routeProvider, $httpProvider, $locationProvider) { 
    $locationProvider.html5Mode(true); 
    $routeProvider 
    // Below are all sections at index page 
    .when('/#index', { 
     controller: 'WelcomeCtrl', 
     templateUrl: 'views/welcome/index.html' 
    }) 
    .when('/#products', { 
    }) 
    .when('/#learn', { 
    }) 
    .when('/#help', { 
    }) 
    .when('/#contact', { 
    }) 

    // Other pages not using fullpage.js 
    .when('/cases', { 
     controller: 'CasesCtrl', 
     templateUrl: 'views/welcome/cases/index.html' 
    }) 
    .when('/users', { 
     controller: 'UsersCtrl', 
     templateUrl: 'views/users/login.html' 
    }) 
    .otherwise({ 
     redirectTo: '/' 
    }); 
}); 

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

Кроме того, правила маршрута с хэш-тегами, кажется, не работают при настройке html5Mode true, я получил URL-адреса, чтобы стать http://xxx/%23products, как решить эту проблему?

Спасибо.

+0

это не сработает. Угловые (и большинство других рамок SPA) используют '#' внутренне. Угловой будет продолжать использовать хэш для обратной совместимости даже при включенном html5Mode (поэтому ваши URL-адреса дезинфицируются). Угловой предоставляет сервис '$ anchorScroll' для случаев, когда вы должны использовать традиционные привязки в содержимом страницы, но вы не можете комбинировать' $ anchorScroll' с другой библиотекой JS (по крайней мере, насколько мне известно). Вы ** определенно ** не можете использовать другие JS-библиотеки, которые ожидают, что хэш не будет изменен угловым. – Claies

+0

@ Claies, спасибо за ваш комментарий. На самом деле, я еще не использовал $ anchorScroll, потому что он обычно связывается с ng-click и $ location.hash(); однако, поскольку fullpage.js прокручивает раздел с #xxx, я не могу просто использовать щелчок, чтобы решить эту проблему. Возможно, мне нужно добавить правило маршрута, которое может игнорировать путь, например, «/ # products». Но я попытался написать это правило в «/ ## products,/\ # products», оба они не работают ... –

+0

Мне было бы интересно узнать, придумали ли вы решение, но от всего Я знаю, что нет способа оставить хеш-маршруты неизменными. Было много попыток, но никаких успехов, о которых я когда-либо слышал. – Claies

ответ

1

OK, я разрешил его взломать.

Во-первых, я установил флаг 'lockAnchors' to be 'true' на fullpage.js.

Во-вторых, я установил контроллер директивы NavBar, которая обеспечивает $ scope.scrollTo (якорь), то после щелчка и называют scrollTo (якорь), я использую ngSilent молча изменить URL.

Наконец, я проверяю, на какой странице я нажимаю навигационную панель. Если нет индексной страницы с fullpage.js, я использую $ location.path ("/"), чтобы вернуться к индексу, затем тихо добавить привязку к URL-адресу, используя метод fullpage.js для прокрутки к якорю (после таймаута около 1200 ~ 1500).