每当我点击HTML
它会触发
link-a
文件
$( "#content" ).load( "nav-a.html" );
我的base.html文件
<div id="content">
</div>
我的nav-a.html
<component-a> </component-a>
我的问题是组件-a没有rending,是否可以在jquery ajax加载?我在.load
回调上尝试了vm.compile()和vm。$ forceUpdate()但没有任何反应。
答案 0 :(得分:3)
不,有几个原因:
您可能不应该让另一个脚本修改由VueJS控制的DOM元素。它最有可能在最后破坏事物。要执行http请求,您可以使用Vue-resource。当然,它不会更新DOM(你应该将它映射到模板); MVVM框架的整个想法是与View一起建立数据模型。
但即使在这种情况下,您也无法使用原始html注入来直接呈现组件,正如它在v-html指令的文档中所述:
内容以纯HTML格式插入 - 忽略数据绑定。 请注意,您不能使用v-html来组成模板部分,因为 Vue不是基于字符串的模板引擎。相反,组件是 首选作为UI重用和组合的基本单元。
来源:https://vuejs.org/v2/guide/syntax.html#Raw-HTML
所以你可能想要使用x-template,或者更方便的Vue single file components(我真的建议你去看看它们)。但无论如何,您可能需要更改应用程序的逻辑。
答案 1 :(得分:0)
我有同样的问题。 正如Cobaltway所说,由于XSS,在视图中动态加载HTML内容是不安全的。
但是..如果您确定自己的内容来源,可以像我一样:
在我的loadPage(target)函数中,我总是销毁我的vue实例并再次创建它。
所以..你可以这样创建你的vue:
let content_vue_set = {
el: '#content',
// And all your stuff here (data, methods, watchers, etc.)
};
let content_vue = new Vue(content_vue_set);
然后,每次在页面中加载一些内容时,只需这样做:
content_vue.$destroy(); // To destroy the last Vue instance
$('#content').load(new_content); // Actually render the new content
content_vue = new Vue(content_vue_set); // Re-compile your vue instance
正如我所说..它不是最佳解决方案,所以你可能会使用另一种逻辑。
希望这会有所帮助;-)