Vue模板渲染的原理是什么

Vue模板渲染的原理是什么,第1张

vue中的模板template无法被浏览器解析并渲染,因为这不属于浏览器的标准,不是正确的HTML语法,所有需要将template转化成一个JavaScript函数,这样浏览器就可以执行这一个函数并渲染出对应的HTML元素,就可以让视图跑起来了,这一个转化的过程,就成为模板编译。

模板编译又分三个阶段,解析parse,优化optimize,生成generate,最终生成可执行函数render。

parse阶段:使用大量的正则表达式对template字符串进行解析,将标签、指令、属性等转化为抽象语法树AST。
optimize阶段:遍历AST,找到其中的一些静态节点并进行标记,方便在页面重渲染的时候进行diff比较时,直接跳过这一些静态节点,优化runtime的性能。
generate阶段:将最终的AST转化为render函数字符串。

在Word指定位置插入富文本域值(html文本)
遇到此问题,首先想到的就是各种百度。结果度娘了一会并没有发现有用的有效的解决方法,哎,看来还得靠自己啊。
首先整理了下手头上的资源,一是HtmlAgilityPack,专门解析Html文本用的;二是我有ASPOSEWord。
再整理下思路:在Word中插入Html,首先有一点是肯定的,Word跟Html都是Document结构,这点应该是没啥怀疑的。如此的话就感觉好办多了,无非就是Document上插入几个节点,在Html插入节点的方式完全可以运用到此地方。
那么第一种解决方法就是:首先把Word转换为Html,然后在指定位置插入当前要插入的Html代码,然后再保存成Word格式的文档。
第二种方式就是:把Html解析出有效的文本,利用Word增加段落的方式添加从Html中解析出来的文本。
HtmlAgilityPackHtmlDocument hd = new HtmlAgilityPackHtmlDocument();
hdLoadHtml(txtContentValue);
hdDocumentNodeElements("p");
通过此方式就可以获取到富文本域里面的所有文本信息。但是此种方式获取到的节点在ASPOSE类里面不识别。
再继续折腾吧,回到ASPOSE上面。找帮助文档,寻百度。
Document doc = new Document(ServerMapPath("~/tem_bodydoc"));
DocumentBuilder docBuilder = new DocumentBuilder(doc);
docBuilderInsertHtml(txtContentValue);
docSave(ServerMapPath("~/") + "/TestWord121doc");
打开保存后的文件,My God,这样就可以了。再试试带的,也很不错,也可以正常在Word里面正常显示。看来此插件确实很强大啊,不过到目前还并没有解决我的问题。就是插入的位置问题。目前它是插入的头部,即Body的Paragraph 0 处。
接下来就是解决如何把HTML文本插入到指定位置,想了想得首先知道要插入的位置,度娘了一会发现了东东。DocumentExplorer,它可以查看Word文档里面的Doc结构。
速度找了一个,打开后就可以清晰地看到Word文档:
这样的话就知道自己要插入的位置在那个地方。最简单的就是设置好模板,找到要插入的位置节点。
Document temdoc = new Document(ServerMapPath("~/temdoc"));
Document doc = new Document();
DocumentBuilder docBuilder = new DocumentBuilder(doc);
docBuilderInsertHtml(txtContentValue);
docBuilderParagraphFormatAlignment = ParagraphAlignmentLeft;
temdocAppendDocument(doc, ImportFormatModeKeepSourceFormatting);
DocumentBuilder temdocBuilder = new DocumentBuilder(temdoc);
var temParas = temdocBuilderDocumentSections[1]BodyParagraphs;
//int intIndexer = 0;
foreach (Paragraph para in temParas)
{
// 这里面随便指定了一个位置,在Paragraphs的第六个节点处
temdocBuilderDocumentSections[0]BodyInsertAfter(paraClone(true), temdocBuilderDocumentSections[0]BodyParagraphs[5 + intIndexer - 1]NextSibling);
intIndexer++;
}
temdocBuilderDocumentSectionsRemoveAt(1);
temdocSave(ServerMapPath("~/") + "/TestWord1212doc");
再次保存后打开测试Word文档,符合自己的预期,解决了把HTML文本插入到Word文档的指定位置。再试试带的,结果发现Word文档里面有没有,回头想想,之前是可以正常保存且显示的,现在不显示而只显示一个叉叉,看来是因为路劲出问题了。

可以。vue可作为模板进行二次开发,因此可以用adminex模版。adminex是一个扁平化设计管理平台框架主题,响应式设计bootstrap3后台管理模版,集合了很多有用的jQuery组件。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10458078.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-08
下一篇 2023-05-08

发表评论

登录后才能评论

评论列表(0条)

保存