2015-04-01 2 views
1

Я пытаюсь использовать маршрутизатор от route_hierarchical/client.dart, чтобы прослушать событие onpopstate и включить/отключить <div> в моем index.html. (Пример в stagehand.pub dart plugin) Если это делается через обычный <a href="/relativePath"> в index.html, он работает. Но если я пытаюсь изменить путь через button.onClick.listen() обработчик, в котором я называю:window.location.assign() не улавливается Router in dart

window.location.assign('/relativePath'); 

Я получаю 404 и маршрутизатор не обрабатывает мое событие должным образом. Должно ли это действие не вызывать popstate event, который пойман Router, как описано here?

handlers.dart

... 
button.onClick.listen((_){ 
    window.location.assign('/about'); 
}); 

... 

router.dart

var router = new Router(); 
    router.root 
    ..addRoute(name: 'about', path: '/about', enter: showAbout) 
    ..addRoute(name: 'login', defaultRoute: true, path: '/', enter: showLogin) 
    ..addRoute(name: 'context', path: '/context', enter: showContext); 
    router.listen(); 
} 

void showAbout(RouteEvent e) { 
    // Extremely simple and non-scalable way to show different views. 
    querySelector('#login').style.display = 'none'; 
    querySelector('#about').style.display = ''; 
    querySelector('#context').style.display = 'none'; 
} ... 

index.html

... 
<form> 
    <button type="button" id="submit" disabled="true" > 
     Login 
    </button> 
</form> 
... 
+0

Похож на ошибку, пожалуйста, сообщите на http://dartbug.com). Вы можете попробовать 'window.location.href = xxx' (см. Также http://stackoverflow.com/questions/13109233) –

+0

Спасибо за ваш ответ, я видел это сообщение раньше, но, к сожалению, установщик href не работает: ( – raptaML

ответ

1

ОК выглядит так, как будто я не достигаю своей цели, допуская вышеуказанное поведение.

Благодаря Günther Zöchbauer за помощь. Я подал его с соответствующим Github project, поскольку я думаю, что он должен работать.

Что теперь я использую и то, что работает, включая поддержку истории является

router.gotoUrl('/relativePath')

в обработчике onButtonClick. Это абсолютно так.

1

onPopState - это неправильное мероприятие. Это событие запускается только в том случае, если вы переходите к существующей записи истории (назад, вперед, pushState, переходите ко второй записи в истории). То, что вы ищете, вероятно, является событием window.onHashChange.

+0

Похоже, я ошибался, но разве это не должно быть связано с маршрутизатором? – raptaML

+0

Это зависит от конфигурации маршрутизатора (я тоже не специалист по этому вопросу). Вы можете включить usePushState. В зависимости от этого параметра вы должны использовать URL-фрагменты ('http: // example.com/index.html # someroute') или целые URL-адреса для представления маршрутов (например,' http: // example.com/someroute'), которые нуждаются в поддержке сервера, если вы загружаете ressources. вы устанавливаете необходимость сопоставления маршрута в соответствии с этими схемами. –

+0

Если вы используете route_hierarchical напрямую, это 'useFragment' вместо' usePushState', когда вы используете его из Angular.dart (см. например https://github.com/angular/route .dart/блоб/cc252ffd3 7944a438f707482fa3bd8aa98a9ae59/пример/базовый/example.dart # L15). –

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