💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] # API过滤器怎么使用 ## 前言 需要注意的是,art-template 的 v3 和 v4 版本在过滤器这个 API 上有所改变,v3 版本的过滤器 API template.helper,而 v4 版本的过滤器 API 是 template.default.imports v3 版本 ```javascript template.helper.functionName = function() { ... return ... } ``` v4 版本 ```javascript template.defaults.imports.functionName = function() { ... return ... }; ``` ## 引入坑 有一个关于如何引入 art-template 的坑:(其实这坑在 `三个主要API的使用方法` 中提及过 ) * 如果你将 art-template 用于前端,你最好是引入文件名为 template-web.js 的 art-template; ```javascript // 正确 <script src="../template-web.js"></script> // 正确 import template from "art-template/lib/template-web.js" // 错误 import template from "art-template" ``` * 如果你将 art-template 用于后端(此处特指Node后端,其他Java后端等我尚未实践过,不敢妄作指导),那无所谓,都可以引入; ```javascript // 正确 import template from "art-template/lib/template-web.js" // 正确 import template from "art-template" ``` 以下,我会写几个关于 art-template 过滤器 API 如何使用的例子,并指出可能会报的错误 ## 栗子 > 以下所有例子,为了统一,我选择 render 这个 API 用于渲染 ### 栗子 1 > index.html ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Static Template</title> </head> <body> <div id="container"></div> <script src="./node_modules/art-template/lib/template-web.js"></script> <script> template.defaults.imports.test = function(content) { return content + "-啦啦啦"; }; let renderResult = template.render( "<h1>{{ content | test content }}</h1>", { content: "哈哈哈" } ); document.getElementById("container").innerHTML = renderResult; </script> </body> </html> ``` ### 栗子 2 > App.vue ```vue <template> <div id="app"> <img width="25%" src="./assets/logo.png"> <!-- <HelloWorld msg="Hello Vue in CodeSandbox!" /> --> <div id="container"></div> </div> </template> <script> import template from "art-template"; // import template from "art-template/lib/template-web"; export default { name: "App", mounted() { template.defaults.imports.test = function(content) { return content + "-啦啦啦"; }; let renderResult = template.render( "<h1>{{ content | test content }}</h1>", { content: "哈哈哈" } ); document.getElementById("container").innerHTML = renderResult; } }; </script> <style> #app { font-family: "Avenir", Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } </style> ``` 效果图: ![](https://img.kancloud.cn/f8/09/f809c51dd7d9c8bc812bb60977120e91_1508x882.png) ### 栗子 3 > index.js ```javascript var http = require("http"); // const template = require("art-template"); const template = require("art-template/lib/template-web.js"); template.defaults.imports.addOne = function(num) { return num + Math.random(); }; let templateString = "<h1>{{ num | addOne num }}</h1>"; let html = template.render(templateString, { num: Math.random() }); console.log(new Date().getTime()); //create a server object: http .createServer(function(req, res) { res.write(html); //write a response to the client res.end(); //end the response }) .listen(8080); //the server object listens on port 8080 ``` 效果图: ![](https://img.kancloud.cn/68/fe/68fe080c02150dad43460888ea278097_1836x854.png) ## 可能出现的报错 ### 问题一 > Cannot set property '.art' of undefined 类似下图: ![](https://img.kancloud.cn/eb/72/eb72b129d50e364fa70667238ab520b7_1503x882.png) 原因: 引入错了,应该引入 template-web.js,而不是 art-template。 ```javascript // 正确 import tempalte from "art-template/lib/template-web.js"; // 错误 import template from "art-template" ``` 综上,保险起见,建议引入 template-web.js。