У меня есть основной компонент приложения, который использует компонент login_form, когда отправляется форма входа в систему, я хочу перенаправить страницу домой, используя маршрутизатор.Обмен переменными между компонентами
/main_app/main_app.dart
@CustomTag('main-app')
class MainApp extends PolymerElement {
@observable String route;
final Router router = new Router();
MainApp.created() : super.created();
ready() {
print('Main App: ready()');
router.root
..addRoute(name: 'home', path: '/', enter: showHome, defaultRoute: true)
..addRoute(name: 'login', path: '/#!/login', enter: showLogin);
router.listen();
}
void showHome(RouteEvent event) {
print("Main App: showHome()");
route = event.route.name;
}
void showLogin(RouteEvent event) {
print("Main App: showLogin()");
route = event.route.name;
}
}
/login_form/login_form.dart
@CustomTag('login-form')
class LoginForm extends PolymerElement {
@observable String username;
@observable String password;
LoginForm.created() : super.created();
void submit(Event event, Object detail, Node sender) {
// Form submit
// Access router here
// ie. router.go('home', {});
}
}
я нашел решения, такие как использование одноплодной как этот
static final Router _sharedRouter = new Router();
static Router get sharedRouter => _router;
th ru
MainApp.sharedRouter.go('home', {}}
Есть ли лучший способ сделать это?
Благодарит Вас, Логин форма помещаются внутри основных-приложений, но вложенный, главное-приложение компонент -> Логин-PAGE- component -> login-form –
Я вижу, тогда вам нужно будет передать поле «route» каждому дочернему элементу в цепочке. В этом случае подход в глобальном масштабе может быть лучше подходит. То, что вы также можете сделать, - это запустить событие по изменению маршрута, а заинтересованные компоненты прослушать это событие и сохранить последнее полученное значение, переданное с событием. –
Спасибо, я попробую –