【发布时间】:2017-01-12 04:49:53
【问题描述】:
是否有可能/可行使用 Vue 来创建实例化到由例如呈现的自定义标签上的组件PHP 应用程序?某种“自定义元素灯”?
如果我将 Vue 实例安装到页面根元素上,它“工作”,但是 - 据我了解 - 在这种情况下,Vue 使用整个页面作为模板。我想这可能是一个性能问题,如果其他 javascript 代码与 DOM 发生冲突,会导致麻烦。
目标是逐步替换遗留的 jQuery 代码。有没有解决这个问题的通用方法?
编辑:嵌套这些组件也是一项要求。一个简单的例子是嵌套可折叠。
编辑 2:一些小提琴来说明问题。
基于 riot.js 的可行解决方案: https://jsfiddle.net/36xju9sh/
<div id="page">
<!-- This is supposed to show "This is a test." twice. -->
<test>
<test></test>
</test>
</div>
<script type="riot/tag">
<test>
<p>This is a test.</p>
<yield/>
</test>
</script>
<script>riot.mount('*')</script>
使用 Vue.js 的两种方法: https://jsfiddle.net/89ejjjsy/1/
HTML:
<div id="page">
<!-- This is supposed to show "This is a test." twice. -->
<test>
<test></test>
</test>
</div>
<script type="text/x-template" id="test-template">
<p>This is a test.</p>
<slot></slot>
</script>
Javascript:
Vue.config.ignoreCustomElements = ['test'];
// This won't hit the nested <test> element.
new Vue({
el:'test',
template: '#test-template',
});
// This does, but takes over the whole page.
Vue.component('test', {
template: '#test-template',
});
new Vue({
el: '#page',
});
【问题讨论】:
-
Vue实例是独立的,除非它们是组件,因此从具有本地化功能的独立Vue开始,完成后将它们转换为组件并使用单个 Vue 应用程序。 -
我忘了说嵌套也是一个要求。相应地编辑了问题。
-
没关系,你可以在每个 Vue 实例中使用组件。只是不要在这些独立项目之间共享实例。总是创建自己的..Something like this 会正常工作吗?
标签: javascript vue.js progressive-enhancement