繁体   English   中英

使用vuejs单击按钮时如何添加打开另一个组件

[英]How to add a open an another component when a button is clicked using vuejs

我将 vuejs 用于设计目的,我希望当我单击登录按钮时它会打开我的仪表板,但我不能这样做,因为我是 vue js 的新手,在我的代码下方 v-on 处理程序中的错误:“TypeError:无法读取属性 'CForm' 为 null"

vue.esm.js?a026:1897 TypeError: Cannot read property 'CForm' of null at click (eval at./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue -loader","cacheIdentifier":"0b619c3d-vue-loader-template"}../node_modules/vue-loader/lib/loaders/templateLoader?js..?/node_modules/cache-loader/dist/cjs.js。 ?./node_modules/vue-loader/lib/index.js?.:/src/views/pages/Login,vue:vue&type=template&id=07b13bd8& (34:js.23). ?97:73) 在 invokeWithErrorHandling (vue .esm.js.a026?1863) 在 HTMLButtonElement:invoker (vue.esm.js.a026.2184) 在 HTMLButtonElement?original:_wrapper (vue.esm.js?a026:7565

)

 Login.vue

    <template>
    <div id="login">
      <CContainer class="d-flex content-center min-vh-100">
        <CRow>
          <CCol>
            <CCardGroup>
              <CCard class="p-4">
                <CCardBody>
                  <CForm>
                    <h1>Login</h1>
                    <p class="text-muted">Sign In to your account</p>
                    <CInput
                     name:username
                      placeholder="Username"
                      autocomplete="usernameemail"
                    >
                      <template #prepend-content><CIcon name="cil-user"/></template>
                    </CInput>
                    <CInput
                     name:password
                      placeholder="Password"
                      type="password"
                      autocomplete="curent-password"
                    >
                      <template #prepend-content><CIcon name="cil-lock-locked"/></template>
                    </CInput>
                    <CRow>
                      <CCol col="6" class="text-left">
                        <CButton color="primary" class="px-4" @click="check(this.CForm)">Login</CButton>
                      </CCol>
                      <CCol col="6" class="text-right">
                        <CButton color="link" class="px-0">Forgot password?</CButton>
                        <CButton color="link" class="d-md-none">Register now!</CButton>
                      </CCol>
                    </CRow>
                  </CForm>
                </CCardBody>
              </CCard>
              <CCard
                color="primary"
                text-color="white"
                class="text-center py-5 d-sm-down-none"
                body-wrapper
              >
                <h2>Sign up</h2>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
                <CButton
                  color="primary"
                  class="active mt-3"
                >
                  Register Now!
                </CButton>
              </CCard>
            </CCardGroup>
          </CCol>
        </CRow>
      </CContainer>
    </div>
    </template>

    <script type="text/javascript">
    export default {
      name: 'Login',
    methods:{
                check(CForm){
               if (CForm.username.value=="demon" && CForm.password.value=="pwr") {
                  window.open("Dashboard.vue")
                } else {
                  alert("wrong email and password")
                }
                }
             }
     }
    </script>

您无法使用 window.open (url) 打开视图。

您可以使用 axios(或类似名称)在您的服务器上请求身份验证。

单击登录按钮时:将登录名和密码与 Axios 发送到服务器身份验证端点(例如:www.yourserver/login/connect.php),以 POST 模式。

您的服务器将需要对您进行身份验证并返回响应。 在视图中,可以在请求的回调部分测试答案:为此提供了一个方法。

如果成功:访问您的仪表板页面(window.open(“www.Yourserver/dashboard.php”)。

注意:dashboard.php 必须验证你是否真的被授权。

如果您使用 spa 逻辑(单页应用程序)。 您将使用 vueroute 并且可能使用 vuex.js。

我认为您需要深化概念 vue.js / spa 应用程序 / 登陆页面 / vueroute.js / vuex.js / axios (或类似)。 祝你好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM