Pug中如何检测传入参数是否为mixin类型以避免代码报错
问题根因:Pug的执行顺序差异
Pug的模板执行逻辑分阶段,才会出现你遇到的两种写法效果不同的情况:
- 顶层非函数/非mixin内的代码,会和mixin注册流程同步执行。你直接在模板根节点写
if pug_mixins['myMixin']的时候,myMixin的定义还没完成挂载到pug_mixins全局对象上,自然检测不到,所以输出404。你最开始直接打印pug_mixins为空也是同样的原因,打印动作发生在mixin注册完成前。 - 你把检测逻辑封装在
typeCheck函数里,调用时机是在myMixin2执行的时候,这时候整个模板所有的mixin都已经完成注册,pug_mixins对象已经包含了所有定义好的mixin,所以检测逻辑可以正常生效。至于你写错mixin名时报错能读到pug_mixins,也是因为报错发生在所有mixin注册完成后的调用阶段,和打印的时机不一样。
可用的检测实现方案
就用你已经验证通过的封装逻辑即可,也可以简化成更通用的调用mixin的工具mixin:
// 通用mixin检测调用工具 mixin useMixin(name, ...args) - if (pug_mixins[name]) +#{name}(...args) - else p 无效的mixin:#{name} // 测试用的mixin mixin test(text) div 调用成功:#{text} // 使用示例 +useMixin('test', '测试参数') // 正常调用test mixin +useMixin('notExist') // 输出无效提示
注意点:
- 检测逻辑必须封装在函数/其他mixin内部,在实际调用的阶段执行,不要在顶层执行
- 入参需要传mixin的字符串名称,不要直接传未定义的标识符
- 动态调用的语法
+#{name}()要确保name是字符串类型,避免语法错误
内容的提问来源于stack exchange,提问作者Aybak3k
相关产品推荐
相关产品推荐

