javascript - 有没有一种方法可以初始化一个保留初始 HTML 的 Vue 对象

标签 javascript html dom mvvm vue.js

我想使用 Vue.js 来更轻松地操作 DOM,但是当我初始化一个 Vue 对象时,它会在操作之前首先重写后端生成的初始数据。

例如我有这个标记:

<ul id="list">
  <li v-repeat="elements" v-text="content">a</li>
  <li v-repeat="elements" v-text="content">b</li>
  <li v-repeat="elements" v-text="content">c</li>
</ul>

然后我想使用 new Vue({ el: '#list' }) 这样它会以某种方式读取已经存在的标记并在通过编辑 $data< 进行操作之前保留它。这在某种程度上是可以实现的吗?

最佳答案

我认为这不可能按照您想要的方式进行。 Vue.JS 不直接对 DOM 进行操作。它读取 DOM 元素,将它们转换为渲染函数,并用渲染函数的结果替换整个元素。

你可能应该使用 JQuery 来扫描你的 DOM 并填充你的 $data 对象(可能还有你的 Vue 模板字符串),然后用这个生成的数据初始化你的 Vue 实例。

但总的来说 - 您应该重新考虑您的应用程序逻辑,因为您似乎在做一些非常复杂的事情,这可能会更容易解决。任何生成您的 DOM 模板的内容也可能直接呈现为 JS 变量,甚至可以通过 AJAX 调用访问...

如果你想在客户端不支持 JS 或 Vue 的 CDN 不可用时呈现后备方法,你可以使用脚本模板方法。在脚本标签中定义您的 Vue.JS 内容,当 Vue 准备就绪时,它将替换原始 DOM。

例子:

function loadVue() {
  new Vue({
    data: { values: [ 'aaa','bbb','ccc' ] },
    template: '#list-template',
    el: '#list'
  })
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.4/vue.js"></script>

<ul id="list">
  <li>a</li>
  <li>b</li>
  <li>c</li>
  <button onclick="loadVue()">Load Vue.JS</button>
</ul>

<script type="text/x-template" id="list-template">
<ul id="list">
  <li v-for="v in values">{{v}}</li>
</ul>
</script>

关于javascript - 有没有一种方法可以初始化一个保留初始 HTML 的 Vue 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27608051/

相关文章:

javascript - 从数据库中获取数据并将其发送到 javascript 函数

javascript - 如何向 HTML 字符串添加属性

javascript - 函数在传递给函数组件时不执行

没有滚动条的 HTML 全屏端

javascript - 下拉圆形单选按钮、Bootstrap...事件按钮

python - 如何序列化 beautifulsoup 访问路径?

javascript - 在 jQuery 中查找父元素的数量

javascript - 如何预测 HTML 元素的宽度以便在不透明度和宽度上进行 CSS 转换?

javascript - 如何使用 jQuery 获取所有嵌套元素?

javascript - 物化选择元素上没有 "onChange"事件