JavaScript 代码中的值插值

如果需要将服务器端变量传递给客户端 JavaScript(或其他需要它的语言),则插值值很有用。

对于变量,数字,字符串等,你可以使用括号语法和解释点将这些类型的变量直接传递到 JavaScript 中(以便评估括号内的代码。)这对于参数化很有用需要服务器内容的 JavaScript 代码。

在下面的示例中,我们必须将 username 包装在引号中,以便 JavaScript 将其解释为字符串; Pug 将按原样输出变量的内容,因此我们需要将其放在引号中以使其成为正确的 JavaScript 字符串。对于 number 来说,这不是必需的,其中 JavaScript 将解释我们想要的数字(作为数字)。

index.js

let number   = 24;
let username = "John";
res.render("index", {
    number:   number,
    username: username
});

index.pug

html
    head
    script.
        // Sets the username of the current user to be displayed site-wide
        function setUsername(username) {
            // ...
        }
        var number   = #{number};
        var username = "#{username}";
        setUsername(username);
        
    body
        p Welcome to my site!

index.pug 输出

<html>
    <head>
        <script>
            // Sets the username of the current user to be displayed site-wide
            function setUsername(username) {
                // ...
            }
            var number   = 24;
            var username = "John";
            setUsername(username);
        </script>
    </head>
    <body>
        <p>Welcome to my site!</p>
    </body>
</html>

如果需要插入 JavaScript 对象的值(例如,有关用户的所有信息),则必须将输出字符串化为 Pug,以便将其视为 JavaScript 对象。还有必要输出变量的原始内容,而不是它的评估形式。如果你要输出转义变量(var user = #{JSON.stringify(user)}),你会收到一个转义版本的对象(引号和撇号转换为 &quot;),这不是我们想要的 JSON.stringify 来处理它。

index.js

var myUser = {
    name:    "Leeroy Jenkins",
    id:      1234567890,
    address: "123 Wilson Way, New York NY, 10165"
};

res.render('index', {
    user: myUser
});

index.pug

doctype html
html
    head
        script.
            window.onload = function () {
                function setUsername(username) {
                    return username;
                }

                var user = !{JSON.stringify(user)};
                document.getElementById("welcome-user").innerHTML = setUsername(user.name);
            };

    body
        div(id="welcome-user")

index.pug 输出

<!DOCTYPE html>
<html>
    <head>
        <script>
            window.onload = function() {
                function setUsername(username) {
                    return username;
                }

                var user = {
                    "name": "Leeroy Jenkins",
                    "id": 1234567890,
                    "address": "123 Wilson Way, New York NY, 10165"
                };
                document.getElementById("welcome-user").innerHTML = setUsername(user.name);
        };
        </script>
    </head>
    <body>
        <div id="welcome-user"></div>
    </body>    
</html>

#welcome-userinnerHTML 等于 Leeroy Jenkinsuser 变量的内容直接打印到 HTML 源代码