【问题标题】:vuejs - how to pass data to webpacked root instancevuejs - 如何将数据传递给 webpacked 根实例
【发布时间】:2017-01-03 05:10:34
【问题描述】:

我有一个应用程序,我使用Single File Components 在表格中显示数据。数据是基于search 字符串和我想要包含在结果中的列来查询的(数据基本上是通过 ajax 请求获取的)。

我的目标是创建一个可重用的组件,以便我可以将查询文本和列名传递给组件。通常我可以为此使用propsslots,但由于我使用的是Single File Components,我不知道如何将数据传递给组件。

Single File Component 的“public”接口如下所示:

<!-- index.hmtl -->
<div id="app"></div>
<script src="./build/webpackedComponent.js"></script>

// main.js / Component entry point
import Vue from 'vue'
import App from './components/app.vue'

new Vue({
  el: '#app',
  render: h => h(App)
})

App 内部,我需要 ajax 请求的数据。我的一个想法是在组件的主入口点中导入一个json 文件,但是每次更改 json 时我都必须重新打包组件,并且对于组件的多次使用,我需要分别打包它们每个使用不同数据的实例的时间...

有什么想法吗?

【问题讨论】:

    标签: javascript webpack vue.js


    【解决方案1】:

    找到您的webpack.base.conf.js 文件(在我的项目中它位于build 文件夹内)或等效的配置文件,然后将library: 'myLibrary' 添加到输出对象。

    (最终应该是这样的:)

    module.exports = {
      entry: {
        app: ['./src/main.js']
      },
      output: {
        library: 'myLibrary',
        path: config.build.assetsRoot,
        publicPath: process.env.NODE_ENV === 'production' ? config.build.assetsPublicPath : config.dev.assetsPublicPath,
        filename: '[name].js'
      },
      .
      .
      .
    

    然后在 main.js 中,你可以像这样导出 Vue:

    // main.js / Component entry point
    import Vue from 'vue'
    import App from './components/app.vue'
    
    export { Vue, App };
    

    现在在全局范围内你可以这样做:

    new myLibrary.Vue({
      el: '#app',
      data: {
        value1: 12,
        value2: 14
      },
      components: { App: myLibrary.App },
      template: '<App :prop1="value1", :prop2="value2"></App>'
    });
    

    也就是说,您在 main.js 中导出的任何内容都可以通过您在 webpack 配置文件中提供的库的名称在全局范围内访问...在这种情况下,myLibrary

    【讨论】:

    • 这并没有什么帮助,因为 main.js 也被打包了。因此,对于data 的每一次更改,我都必须重新包装 SFC。我正在寻找的是以某种方式将单个文件组件公开给全局范围,因此我可以通过使用这些组件的新 Vue 实例在脚本标签中使用它们。
    • @Johannes 但是为什么不能向data 提供可以在 main.js 中进行的 Ajax 调用的结果呢?或者完全使用计算属性而不是data
    • 因为 ajax 请求需要一些用户输入/配置,以便发送正确的查询。我需要能够从全局范围内配置/将此输入传递给 webpacked 组件。
    • @Johannes 好的,现在我对您的问题有了更好的理解。如果将 ajax 请求的结果保存在 window.ajax_results 中,然后在 App 组件中观察此变量的变化会怎样?
    • 太棒了!非常感谢你的帮助!顺便说一句,myLibrary.App 不起作用。将其分配给变量或使用App: myLibrary.App 都可以。
    猜你喜欢
    • 2020-10-18
    • 2017-04-17
    • 2017-08-31
    • 2018-03-22
    • 1970-01-01
    • 2015-12-10
    • 2018-02-15
    • 2018-08-05
    • 1970-01-01
    相关资源
    最近更新 更多