javascript - 如何在 javascript 中创建动态内插字符串?

标签 javascript typescript ecmascript-6 string-interpolation

我正在努力创建一个可重用的 UI 组件,并试图弄清楚如何让组件的使用者为组件的特定区域提供他们自己的模板。

我正在使用 typescript 并尝试利用字符串插值来完成此操作,因为这似乎是最合适的操作过程。

这是我目前所拥有的:

export class Pager {
    pageNumber: number = 1;

    getButtonHtml(buttonContentTemplate?: string, isDisabled?: boolean): string {
        buttonContentTemlpate = buttonContentTemplate || '${this.pageNumber}';
        isDisabled = isDisabled || false;
        return `<button id="button-id" type="button"  ${!isDisabled ? '' : disabledAttribute}>
                    ${buttonContentTemplate}
                </button>`;
    }
}

我有一些其他方法可以根据用户输入/交互更新页码,但我希望它在 getButtonHtml 时起作用被调用,返回值将是<button id="button-id" type="button">1</button> ,但我得到的是 <button id="button-id" type="button">${this.pageNumber}</button> .

有没有办法让 javascript 再次计算字符串,并插入剩余的占位符?

我看过 MDN关于这个主题的文章并认为 String.raw方法可能是我需要使用的方法,但我不确定,无论我尝试什么,我都没有得到它的工作。

如有任何帮助,我们将不胜感激。

最佳答案

问题是 Template literals立即解释。

您要做的是延迟加载模板。所以最好传入一个返回字符串的函数。

export class Pager {
    pageNumber: number = 1;

    getButtonHtml(template?: () => string, isDisabled=false): string {
        template = template || function() { return this.pageNumber.toString() };
        return `<button id="button-id" type="button"  ${!isDisabled ? '' : disabledAttribute}>
                    ${template()}
                </button>`;
    }
}

此外,您可以利用默认参数来避免 || 技巧。

关于javascript - 如何在 javascript 中创建动态内插字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39642838/

相关文章:

javascript - 使用 jQuery 或 JavaScript 检查输入/类型文本是否为空/null

javascript - 与 2 个触摸事件 javascript 插件冲突,以错误的顺序分层触摸事件?

javascript - 如何填充 Windows 8.1 动态磁贴?

javascript - 使用键盘输入登录 Angular

javascript - 如何在javascript中合并两个可选数组

javascript - 将每个数组的子元素组合成一个新的最终数组 - JavaScript

javascript - 创建基于 JSON 响应的计数 - JavaScript

typescript - 我应该如何测试 React Hook "useEffect"使用 Typescript 进行 api 调用?

JavaScript ES6 : Grouping methods in es6 classes?

javascript - 如何使用 Flow 键入默认导出?