目前并没有找到合适的解决方案。2.0 的 Vue 将 compile 工作提前,并且 compiler 也是单独一个包(除非你直接引用的是 vue.js 文件,包含 compiler 和 runtime,那么第一种方法是适用的),那么并不能动态的生成模板。除非用户传入的是 render 能识别的 DOM tree。
如果此时需要增加一个 API 支持让用户自定义 option 部分的模板◆。此处用 slot 并不能解决问题◆◆。
文件里的 template 标签里写模板。但是有时候会需要动态生成模板的需求,例如让用户自定义组件模板,或者设置组件的布局。
我们知道 Vue 在内部帮我们做了许多优化,但是在这里可能会由于某些优化导致动态拼接的模板无法渲染成功。例如这里我们不使用 v-for 而是手工遍历 options 生成需要的 HTML
综上,在 Vue 1.x 里不存在预编译的概念,甚至还可以结合取到slot里的内容拼接进模板里。但 2.0 就麻烦了,并找不到理想的方法j9九游会-真人游戏第一品牌。
这种方式就略显蛋疼,而且效率最差。 interpolate 也是我最开始做动态渲染模板想到的方式,不推荐使用。
这样我们就可以开发让用户自定义布局的组件了,用户传入布局参数,通过手工拼接模板,设置了_linkerCachable = false也不会被缓存j9九游会-真人游戏第一品牌。
按照这样的思路,其实可以让用户传入的模板预先编译好j9九游会-真人游戏第一品牌详解Vue动态添加模板的几种方法,传入到组件内,拼接 DOM tree 看起来也能解决问题。那么可以这么玩。
通过打印组件对象可以获得一个信息,在$options里定义了一个 template 属性,写在 template 标签里的模板,最终编译后也会在 $options.template 里◆◆。通过文档的生命周期 可以得知,在 created 的时候, 实例已经结束解析选项, 但是还没有开始 DOM 编译 也就是说,如果用户通过 prop 的数据我们可以获得NG南宫28官网登录,但是模板其实还没有渲染成 DOM。经过测试,在created修改this.$options.template是可以改变最终生成的 DOM 的,同时也能拿到 props 的内容。
使用 partials 也能达到添加自定义模板的目的,但是通常的做法是要全局注册 partial,这么做并不优雅。 vue-strap 就是这么做的◆。如果重名了会被覆盖(初次渲染不会,但是数据更新重新渲染 DOM 时就会被覆盖)。
例如要做一个类 select 的组件,用户传入 options 数据,通过 value prop 获取选中值,最基本的原型如下◆◆。