【问题标题】:How to fix FlowRouter.getParam from being 'undefined'如何修复 FlowRouter.getParam 从“未定义”
【发布时间】:2019-09-20 08:24:13
【问题描述】:

我正在向网站添加新页面,并且正在复制已经存在且当前在网站中运行的代码。为什么 FlowRouter.getParam 在其他任何地方都可以工作时出现未定义?

客户端/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'});
    }
});

我错过了什么?

【问题讨论】:

  • 问题解决了吗?

标签: javascript meteor flow-router


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这就是我最终做的事情,它有效。

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

    【讨论】:

    • 那么上面好心人的建议是什么
    猜你喜欢
    • 2019-09-16
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-11
    • 1970-01-01
    • 2022-01-20
    • 2020-01-26
    相关资源
    最近更新 更多