Как я могу показать/скрыть элементы навигации в зависимости от состояния пользователя с помощью Aurelia

Я новичок в Aurelia, и мне нравится каждая минута кривой наклона. Я использую Skeleton Navigation от Aurelia для приложений es6, и в настоящее время я работаю над простым приложением, в котором пользователь входит в систему и отправляет историю после предоставления определенных деталей. Поток моего приложения довольно прост:

Login Screen --> Screen where user provides phone number --> User submit's story

На моей панели навигации есть «Домой» и «Отправить историю». Однако я хочу скрыть пункт меню «Отправить историю» до тех пор, пока пользователь не укажет свой номер телефона. Таким образом, в основном при отправке номера телефона, если функция возвращает true, мне нужно, чтобы пункт меню отображался.

Я думаю, что есть два способа сделать это. Один из них заключается в привязке элементов навигации к значению true или false в зависимости от того, отправлен ли номер телефона, а другой — в динамическом добавлении маршрута при успешной отправке номера телефона. Какой лучше использовать? И я был бы очень признателен за толчок в правильном направлении.

Я попытался назначить логическую переменную для маршрутов, но это дало смешанные результаты. См. код ниже (я включил только связанный код):

check_phone = false;

configureRouter(config, router) {
    config.title = 'Aurelia';
    config.map([
        {route: ['', 'home'], name: 'home', moduleId: 'home', nav: check_phone, title: 'Home'},
        {route: 'story', name: 'story', moduleId: 'story', nav: check_phone, title: 'Submit a Story'}
    ]);
    config.mapUnknownRoutes('/');
    this.router = router;
}

phone_submit() {
    if(success) this.check_phone = true;
}

Я также пробовал динамически добавлять маршрут, но он не работает:

configureRouter(config, router) {
    config.title = 'Aurelia';
    config.map([
        {route: ['', 'home'], name: 'home', moduleId: 'home', nav: check_phone, title: 'Home'},
    ]);
    config.mapUnknownRoutes('/');
    this.router = router;
}

phone_submit() {
    if(success) 
        this.router.addRoute({route: 'story', name: 'story', moduleId: 'story', nav: true, title: 'Submit a Story'})
        this.router.refreshNavigation();
}

Пожалуйста, помогите мне в этом. Спасибо за ваше время!


person realnsleo    schedule 11.08.2016    source источник


Ответы (1)


На самом деле на маршруте есть свойство настроек. Вы можете установить свойство settings для объекта, которым вы можете манипулировать. Вы можете использовать этот объект, когда вы визуализируете свой маршрут, и панель навигации скрывает его, если он имеет определенное свойство.

например {route: user/:id', name: user, moduleId: './Aurelia/users, nav: false, title: 'User', settings: {isShown: true} }

Посмотрите мою статью о ссылке на тему, в которой более подробно объясняется использование свойства настроек;

https://www.linkedin.com/pulse/routing-aurelia-framework-mike-gold?trk=mp-author-card

person mike gold    schedule 24.08.2016