在使用 Flask 时也使用花括号作为 Vue.js 中的值

Ani*_*t G 4 html javascript vue.js

我的代码工作得很好,然后我决定将它移到烧瓶中。我在我的代码中同时使用 Vue.js 和 Flask。我的 html 代码如下:

<html>

<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO"
        crossorigin="anonymous">
</head>

<body>
    <div id="app" class="container">
        <div class="row">
            <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
                <div class="collapse navbar-collapse" id="navbarNav">
                    <ul class="navbar-nav">
                        <li class="nav-item" v-for="tab in tabs" v-bind:class="tab.active">
                            <a href="#" class="nav-link">{{ tab.name }}</a>
                        </li>
                    </ul>
                </div>
            </nav>
        </div>
        <div class="row">
            <div class="col">
                <hr class="navbarDivide">
            </div>
        </div>
    </div>

    <!-- Optional JavaScript -->
    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
    <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
        crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49"
        crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy"
        crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="{{ url_for('static', filename='js/challenges.js') }}"></script>
</body>

</html>
Run Code Online (Sandbox Code Playgroud)

当我删除 时{{ tab.name }},它工作得很好。如果我添加tab.name到 中v-bind:class="tab.name",它会在网站中显示正确的 tab.name。这就是 vue.js 有效的所有证据,并且一切都应该有效。通过调试,我发现问题出在{{ tab.name }}(不是tab.name,而是它外面的括号)。有什么解决办法?

我的javascript如下:

var app = new Vue({
    el: '#app',
    data: {
        tabs: [
            { name: "Home", active: "" },
            { name: "Challenges", active: "active" },
            { name: "Scoreboard", active: "" },
            { name: "About", active: "" }
        ],
        challenges: finalChallenges
    }
});
Run Code Online (Sandbox Code Playgroud)

编辑:我刚刚意识到为什么它可能不起作用。{{ something }}是一个烧瓶的东西,它覆盖了 vue.js。有解决方法吗?

Min*_* Le 6

Flask 使用 jinja 作为它的模板语言,它也使用 {{ 变量 }}

所以当 Flask 渲染模板时,{{ tab.name }} 变成了一个空字符串,因为 tab.name 不是当前渲染中的上下文变量。

您可以在括号内使用转义括号

{{ '{{ tab.name }}' }}
Run Code Online (Sandbox Code Playgroud)


Sua*_*PhD 5

而不是像 Minh Tri Le 的回答那样写长表达式。还有另一种方法:您可以像这个答案一样更改 Vue.js 模板分隔符

var app = new Vue({
 el: '#app',
 data: {
 message: 'Hello Vue!'
 },
 delimiters: ['[[',']]']
})
Run Code Online (Sandbox Code Playgroud)

并像这样使用:

 <div id="app">
     {{This is Jinja template declaration}}
     <!--Next is Vue.js declaration-->
     [[ message ]] 
    </div>
Run Code Online (Sandbox Code Playgroud)