v-if和v-else不能工作,因为每次都会更新页面。

问题描述 投票:0回答:1

我有一个问题,即v-if语句中的div不能正确工作。如果你运行的服务器和页面时,你点击的按钮 Sign Up 它将短暂地显示注册的div,但几秒钟后会回到第一个v-if语句中的原始div。

相反,我希望 它将显示只是显示在v-else的div,因为我改变了布尔值。showSignUp 随着 v-on:click="signUp" 这将调用Vue App中的函数来改变布尔值。

这就是 超文本标记语言 :

<body onload="init()">
        <!-- using the Vue App -->
        <div id="app">
            <!-- If it is not signed in just make it sign -->
            <div v-if="!isLoggedIn" class="container-fluid">
                <!-- Top Bar -->
                <div class="row align-items-center justify-content-start">
                    <nav class="navbar navbar-light bg-light">
                        <h1>UST Computer Science Submission Tool</h1>
                    </nav>
                </div>
                <div class="row align-items-center justify-content-end">
                    <div v-if="!showSignUp">
                        <form class="getSpace" > <!-- SIGN IN FORM -->
                            <!-- Input fields -->
                            <div class="form-group">
                                <label for="inputEmail">Email address</label>
                                <input type="email" class="form-control" id="inputEmail">
                            </div>
                            <div class="form-group">
                                <label for="inputPassword">Password</label>
                                <input type="password" class="form-control" id="inputPassword">
                            </div>
                            <!-- Buttons -->
                            <button v-on:click="signIn" class="btn btn-primary">Sign In</button>
                            <button v-on:click="signUp" class="btn btn-primary">Sign Up</button>
                        </form>
                    </div> 
                    <div v-if="showSignUp">
                        <form class="getSpace"> <!-- SIGN UP FORM -->
                            <!-- Input fields -->
                            <div class="form-group">
                                <label for="inputEmail">Email address</label>
                                <input type="email" class="form-control" id="singUpEmail">
                            </div>
                            <div class="form-group">
                                <label for="inputPassword">Password</label>
                                <input type="password" class="form-control" id="singUpInputPassword">
                            </div>
                            <!-- Buttons -->
                            <button v-on:click="submitRegistration" class="btn btn-primary">Submit</button>
                        </form>
                    </div>
                </div>
            </div>
            <!-- Else is already signed in -->
            <div v-else class="container-fluid">
                <div class="row">
                    <div class="col">You did it</div>
                    <div class="col"></div>
                </div>
            </div>
        </div>
    </body>

这是 JS 为Vue应用程序。

let app

// On loading page
function init() {
    app = new Vue({
        el: '#app',
        data: {
            email: '',
            password: '',
            isLoggedIn: false,
            showSignUp: false
        },
        methods: {
            signIn: signIn,
            signUp: signUp,
            submitRegistration: submitRegistration,
        }
    });
}

// methods
function signIn(event) { // when clicked Sing In button
    // check before in the data base if it is correct

    // Now show the Users page
    app.isLoggedIn = !app.isLoggedIn;
}

function signUp (event) { // when clicked Sing Up button
    // This will change the form
    console.log('was here');
    app.showSignUp = true;
}

function submitRegistration (event) {
    console.log(event);
    // Call http 
}
javascript html vue.js button
1个回答
5
投票

你需要阻止该动作

<button v-on:click.prevent="signUp" class="btn btn-primary">Sign Up</button>
© www.soinside.com 2019 - 2024. All rights reserved.