Vue 组件和 AJAX 加载的 HTML 内容
Vue Components and AJAX loaded HTML content
我有一个 Vue 组件,它基本上是一个用于复杂 HTML 标记的 shorthand。
初始加载时,一切正常。
我正在使用 AJAX 将更多这些组件加载到页面上,问题是这个组件在使用 AJAX 加载后不想编译成 HTML 我只得到未渲染的 Vue 组件,如下所示:
<component><slot>content</slot></component>
我查看了 Vue.compile() 和渲染函数,但不知道如何让它工作或如何重新渲染?组件。
希望这是有道理的,任何人都可以阐明我应该在这里做什么吗?
您应该让数据驱动视图。
换句话说,假设您有以下 html:
<div id="app">
<component></component>
<!-- the following ones are inserted via ajax -->
<component></component>
<component></component>
</div>
和 js:
var app = new Vue({
el: '#app',
data: {
foo: 'bar',
}
})
您可能正在发出 ajax 请求并手动将 <component></component>
插入 html。这不是你应该使用 Vuejs 的方式。
让数据驱动视图的方式就是创建所需的数据:
var app = new Vue({
el: '#app',
data: {
foo: 'bar',
components: [
{}, //component related data
...
]
},
components: {
component,
},
ajaxRequest() {
//this should push into your components array
// example:
$.ajax().done(function(data) {
this.components.push(data);
})
}
})
在这段代码中,我向 data
添加了一个新数组 (components
),它将存储我要在我的视图中呈现的组件。当我通过 ajax 获取组件时,我将它们添加到这个数组中。现在,如果我将 html 更改为:
<div id="app">
<component v-for="component in components" data="component">
</component>
</div>
每当 components
数组更新时,Vue 会自动将它们添加到视图中。
使用函数 "extend" 和 "$mount":
axios.get(url).then((response) => {
var MyComponent = Vue.extend({
template: response.data
})
var compiled = new MyComponent().$mount()
$('#div').append(compiled.$el)
})
我有一个 Vue 组件,它基本上是一个用于复杂 HTML 标记的 shorthand。
初始加载时,一切正常。
我正在使用 AJAX 将更多这些组件加载到页面上,问题是这个组件在使用 AJAX 加载后不想编译成 HTML 我只得到未渲染的 Vue 组件,如下所示:
<component><slot>content</slot></component>
我查看了 Vue.compile() 和渲染函数,但不知道如何让它工作或如何重新渲染?组件。
希望这是有道理的,任何人都可以阐明我应该在这里做什么吗?
您应该让数据驱动视图。
换句话说,假设您有以下 html:
<div id="app">
<component></component>
<!-- the following ones are inserted via ajax -->
<component></component>
<component></component>
</div>
和 js:
var app = new Vue({
el: '#app',
data: {
foo: 'bar',
}
})
您可能正在发出 ajax 请求并手动将 <component></component>
插入 html。这不是你应该使用 Vuejs 的方式。
让数据驱动视图的方式就是创建所需的数据:
var app = new Vue({
el: '#app',
data: {
foo: 'bar',
components: [
{}, //component related data
...
]
},
components: {
component,
},
ajaxRequest() {
//this should push into your components array
// example:
$.ajax().done(function(data) {
this.components.push(data);
})
}
})
在这段代码中,我向 data
添加了一个新数组 (components
),它将存储我要在我的视图中呈现的组件。当我通过 ajax 获取组件时,我将它们添加到这个数组中。现在,如果我将 html 更改为:
<div id="app">
<component v-for="component in components" data="component">
</component>
</div>
每当 components
数组更新时,Vue 会自动将它们添加到视图中。
使用函数 "extend" 和 "$mount":
axios.get(url).then((response) => {
var MyComponent = Vue.extend({
template: response.data
})
var compiled = new MyComponent().$mount()
$('#div').append(compiled.$el)
})