javascript - 从现有 HTML 实例化 Vue.js 组件?

标签 javascript vue.js vuejs2 vue-component

我试图让 Vue.js 从现有的 HTML 模板实例化它的组件,但我找不到任何关于这样做的合理信息。我正在使用非 JavaScript 后端框架和 Vue.js 作为正常添加 .js View 堆栈中的文件。

假设我的 HTML 结构如下所示:

<div id="vueApp">
  <div class="vueComponent">...</div>
  <div class="vueComponent">...</div>
  <div class="vueComponent">...</div>
</div>

然后我尝试像这样使用 JavaScript 启用它(为了安全混合使用 jQuery 和 Vue):

<script>
  // declare Vue component
  Vue.component('irrelevantName', {
    template: '.vueComponent',
    data: function() {

      return { something: false }
    }
  });

  // launch Vue app
  jQuery(document).ready(function() {

    var vueApp = new Vue({
      el: '#vueApp',
      created: function() {

         // TODO: some method that will read/parse the component data, do binding, whatever
      }
    });
  });
</script>

每当我有一个精确声明和指向的 <template> 时,这种方法就非常有效。标记在 HTML 结构中,组件应该只是一个单独的。在这种情况下,尽管我试图实例化 n 个由 CSS 类标识的对象。 我知道一种可能的方法是将所有组件数据作为隐藏传递 <input>使用 JSON 化的数组/集合数据,然后询问 vueApp从这些数据中动态创建单一模板驱动的组件,尽管这似乎有点乏味。

有什么建议吗? 提前致谢!

最佳答案

我相信您可能以错误的方式思考这个问题。 Vue 绑定(bind)到单个元素,因此如果您想要操作多个元素,您可以做的是围绕 div#vueApp 创建一个新的 Vue 实例,并使用 Vue 模板在其中创建组件,如下所示:

Vue.component('vue-comp', {
  data: function () {
    return {
      something: false
    }
  },
  template: '<div class="vue-comp"></div>'
})

let vueApp = new Vue({
  el: '#vueApp',
  created: function() {
    
  }
});
div#vueApp {
  padding: 1rem;
  background: #CD545b;
  display: inline-block;
}

div.vue-comp {
  height: 50px;
  width: 50px;
  margin: 0 1rem;
  background: #236192;
  display: inline-block;
}
<script src="https://unpkg.com/vue"></script>
<div id="vueApp">
  <vue-comp></vue-comp>
  <vue-comp></vue-comp>
  <vue-comp></vue-comp>  
</div>

关于javascript - 从现有 HTML 实例化 Vue.js 组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51613656/

相关文章:

javascript - import { Component, Vue } from "vue-property-decorator"与 import Vue from "vue"

javascript - 无法通过 setTimeout() 回调以编程方式显示 Bootstrap Vue 模式

javascript - 基于 bool 值数组在 Vue.js 中绑定(bind)类

javascript - 需要 Angular Material md 复选框

javascript - 当光标悬停在 Google map 折线上时,如何将光标从手更改为手

javascript - 在函数参数中强制执行对象结构

vue.js - 未找到 Sass 相关模块?

vue.js - 将项目从 Vue2 升级到 Vue3 的最佳方式

javascript - 如何在 VueJS 中动态创建输入字段

javascript - 日期范围选择器使用 AJAX 发送选定的日期