无模板的组件

Posted

技术标签:

【中文标题】无模板的组件【英文标题】:Component without template 【发布时间】:2018-09-26 23:39:16 【问题描述】:

我有一些代码可以对服务器进行 api 调用并返回一些 JSON。

它确实作为我的组件中的一种方法存在,但由于它有点长,我想将它提取到它自己的文件中

在 vuejs 中,这里的最佳实践是什么。

应该是没有模板的组件吗?这将如何运作?

我会创建一个 es6 模块吗?

【问题讨论】:

【参考方案1】:

我建议在这里使用 mixin。

在 myCoolMixin.js 之类的文件中定义你的 mixin...

export default 
   methods: 
      myAwesomeMethod() 
         //do something cool...
      
   

你可以像组件一样在 mixin 中定义任何东西。例如数据对象、计算或监视属性等。然后您只需将 mixin 包含在您的组件中。

import myCoolMixin from '../path/to/myCoolMixin.js'

export default 
   mixins: [myCoolMixin],
   data: function() 
      return: 
         //... 
      
    ,
    mounted: function() 
       this.myAwesomeMethod(); // Use your method like this!  
    
 

在此处了解有关 Mixins 的更多信息:https://vuejs.org/v2/guide/mixins.html

【讨论】:

关于 mixins 的重要说明:它影响所有组件和子组件。虽然它用作项目的全局库(仅限方法),但在 mixin 的“已安装”或“创建”挂钩中进行处理将执行该处理脚本的次数与所有已安装入口点的加载组件和子组件的数量一样多 @Raywell 您将此与global mixin 混淆了。如果您像在这个答案中一样添加 mixin - 通过mixins: [myCoolMixin] - 那么它只会被添加到该组件中。【参考方案2】:

混合工作,或者你可以创建一个插件。这是文档示例:

MyPlugin.install = function (Vue, options) 
  // 1. add global method or property
  Vue.myGlobalMethod = function () 
    // something logic ...
  

  // 2. add a global asset
  Vue.directive('my-directive', 
    bind (el, binding, vnode, oldVnode) 
      // something logic ...
    
    ...
  )

  // 3. inject some component options
  Vue.mixin(
    created: function () 
      // something logic ...
    
    ...
  )

  // 4. add an instance method
  Vue.prototype.$myMethod = function (methodOptions) 
    // something logic ...
  

Vue Plugins

【讨论】:

喜欢答案,肯定会研究插件,但我认为 mixins 更适合这里。谢谢。 我个人倾向于使用 mixins,只有当我有大量功能集共享commanity 时我才会选择插件

以上是关于无模板的组件的主要内容,如果未能解决你的问题,请参考以下文章

javascript 反应无状态功能组件模板

[react] 描述下在react中无状态组件和有状态组件的区别是什么?

Go Web 编程之 模板

将 VueJs 组件添加到 Django 模板中

在Django模板中加入VueJs组件。

Vue 测试无渲染组件(jsx scopedSlots)