2016-12-07 2 views
1

Я использую FlowRouter в приложении Meteor. В одном случае ресурс недоступен до определенной даты/времени, поэтому мы перенаправляемся на другой маршрут. Нужно ли в любом случае заменить маршрут на ограниченный ресурс путём перенаправления таким образом, чтобы маршрут ограниченного ресурса не отображался в истории браузера. Выполнение сделает историю (используя спину, вперед) более дружественной к UX.Meteor FlowRouter: заменить путь в истории для ограниченного маршрута

я могу добиться этого в FlowRouter-х triggersEnter для маршрута, ступая вне FlowRouter что-то вроде:

if(restricted) { 
    return window.location.replace(`/waitingroom/${resourceId}/user/${Meteor.userId()}`); 
} 

... но это приводит к перезагрузке страницы, которая является своего рода нежелательным.

Любые вещи?

ответ

1

функция переходит к triggersEnter имеют вторые пары имя redirect вы можете использовать его для перенаправления на другие страницы без перезагрузки страницы и с чистой историей:

FR.route('/restricted-route', { 
    name: 'RestrictedRoute', 
    triggersEnter: [function(context, redirect) { 
    redirect('/replace-route'); 
    }] 
}); 

FR.route('/replace-route', { 
    name: 'ReplaceRoute', 
    action() { 
    // ... 
    } 
}); 

Изменено

Я не конечно, почему требуется синхронизация. Во всяком случае FlowRouter использует Page.js позади сцены, чтобы сделать навигацию, если вы не можете использовать redirect то это должно работать:

FR.route('/restricted-route', { 
    name: 'RestrictedRoute', 
    triggersEnter: [function(context, redirect) { 
    Meteor.setTimeout(() => { 
     FlowRouter._page.replace('/replace-route'); 
    }, 1000); 
    }] 
}); 

Примечание: это не публичный API, поэтому вы должны проверить его перед использованием в производстве.

+0

Функция 'redirect' должна быть синхронной, tho и в' triggersEnter', мы имеем операцию async, whan whan. Это решение не будет точно соответствовать моим потребностям. – asking

+0

@asking updated – Khang

+0

Удивительно, да, это сработало, я могу на самом деле просто использовать 0 миллисекунд tho. Спасибо за внутренний совок! – asking

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