template support loop for es6 concatenate javascript ecmascript-6 template-strings

javascript - support - Cadenas de línea múltiple que no rompen la sangría



template string javascript html (2)

Esta característica se implementa definiendo una función personalizada y luego usándola como una etiqueta ( dontIndent arriba). El golpe del código proviene de la esencia de Zenparsing :

function dedent(callSite, ...args) { function format(str) { let size = -1; return str.replace(//n(/s+)/g, (m, m1) => { if (size < 0) size = m1.replace(//t/g, " ").length; return "/n" + m1.slice(Math.min(m1.length, size)); }); } if (typeof callSite === "string") return format(callSite); if (typeof callSite === "function") return (...args) => format(callSite(...args)); let output = callSite .slice(0, args.length + 1) .map((text, i) => (i === 0 ? "" : args[i - 1]) + text) .join(""); return format(output); }

Lo he probado con éxito en Firefox Nightly:

De acuerdo con este debate , es posible en ECMAScript 6 definir cadenas de líneas múltiples sin tener que colocar líneas posteriores de la cadena al principio de la línea.

La publicación de Allen Wirfs-Brock contiene un ejemplo de código:

var a = dontIndent `This is a template string. Even though each line is indented to keep the code neat and tidy, the white space used to indent is not in the resulting string`;

¿Alguien podría explicar cómo se puede lograr esto? ¿Cómo definir este elemento dontIndent para eliminar los espacios en blanco utilizados para la sangría?


Respuesta de 2016 : el paquete dedent-js se encargará de esto. Tenga en cuenta que el paquete ''dedent-js'' realmente funciona con pestañas y espacios, ''dedent'' falla en las pestañas:

var dedent = require(''dedent-js''); var text = dedent(` <div> <span>OK</span> <div> <div></div> </div> </div> `);

Va a quitar el espacio en blanco anterior en cada línea y el retorno del carro principal. También tiene más usuarios, un rastreador de problemas, y se actualiza más fácilmente que el copiado desde .