如何修复FlowRouter.getParam不被“未定义”

时间:2019-05-01 19:48:21

标签: javascript meteor flow-router

我正在向网站添加新页面,并且正在复制网站中已经存在并且当前正在工作的代码。为什么FlowRouter.getParam在其他地方都可以正常显示?

client / JobInvoice.js

import { Invoices } from '../../../imports/api/Invoice/Invoice';

Template.InvoicePage.onCreated(function(){
  const user = FlowRouter.getParam('_id'); 
  console.log(user);

  this.subscribe('invoices', user);
});

lib / router.js

Accounts.onLogout(function(){
    FlowRouter.go('home');
});

FlowRouter.notFound = {
    action: function() {
        FlowRouter.go('/404');
}
};
const loggedIn = FlowRouter.group({
    prefix: '/secure'
});

loggedIn.route( '/invoice', {
    name: 'invoice',
    action() {
        BlazeLayout.render('FullWithHeader', {main: 
'InvoicePage'});
    }
});

我想念什么?

2 个答案:

答案 0 :(得分:0)

FlowRouter允许您使用动态属性(path-to-regexp)定义路由,这些属性通常代表文档ID或其他动态属性。

例如

FlowRouter.route('/invoice/:docId', { ... })

将定义与/invoice/9a23bf3uiui3big之类的模式匹配的路由,并且通常使用它来呈现单个文档的模板。

现在,如果您想在相应模板中以文档docId的形式访问文档ID,则可以使用FlowRouter.getParam('docId'),它将返回到上述路由9a23bf3uiui3big

由于您的路线定义缺少动态属性,因此FlowRouter.getParam不会接收任何参数。

可能的解决方法是

loggedIn.route( '/invoice/:_id', {
    name: 'invoice',
    action() {
        BlazeLayout.render('FullWithHeader', {main: 
'InvoicePage'});
    }
});

以与其他模板相同的方式访问它。

读物

https://github.com/kadirahq/flow-router#flowroutergetparamparamname

答案 1 :(得分:0)

这就是我最终要做的事,并且有效。

loggedIn.route( '/invoice/:id', {
name: 'invoice',
action() {
    BlazeLayout.render('FullWithHeader', {main: 'InvoicePage'});
}
});