zoukankan      html  css  js  c++  java
  • vue-参数绑定及重定向

    1.参数绑定

     1.1 要实现这样的效果

     点击个人信息,传递参数

     或者直接在url中:

     1.2 实现步骤

    (1)在主页面,main.vue中

    (2)在router/index.js中path要加上参数

     (3)在Profile.vue中展示参数

    1.3 第二种参数绑定的方法:使用props解耦

    router/index.js

    props:true代表可以用props的方式传递参数

    Profile.vue

     Main.vue中不用改

     1.4 出现的两个bug

    (1)template下只能有一个元素,即template下一级只能有一个标签,只能有一个根标签

     这样写就会报错:

     解决办法:

    加一个div标签

    (2)传递参数,name对应的要是组件名

     

     2.重定向

    在router/index.js中

     3.登录界面携带用户信息

    (1)在提交跳转方法中添加username参数,Login.vue

     (2)在router/index.js中

     (3)获取传递过来的参数,Main.vue

     完整代码:

    Login.vue

    <template>
      <div>
        <el-form :model="form" :rules="rules" ref="loginForm" label-width="80px" class="login-box">
          <h3 class="login-title">欢迎登录</h3>
          <el-form-item label="账号" prop="username">
            <el-input type="text" placeholder="请输入账号" v-model="form.username"></el-input>
          </el-form-item>
          <el-form-item label="密码" prop="password">
            <el-input type="password" placeholder="请输入密码" v-model="form.password"></el-input>
          </el-form-item>
          <el-form-item>
            <el-button type="primary" v-on:click="onSubmit('loginForm')">登录</el-button>
          </el-form-item>
        </el-form>
    
        <el-dialog
          title="温馨提示"
          :visible.sync="dialogVisible"
          width="30%"
          :before-close="handleClose">
          <span>请输入账号和密码</span>
          <span slot="footer" class="dialog-footer">
          <el-button type="primary" @click="dialogVisible = false">确 定</el-button>
        </span>
        </el-dialog>
      </div>
    </template>
    
    <script>
      export default {
        name: 'Login',
        data() {
          return {
            form: {
              username: '',
              password: ''
            },
            rules: {
              username: [
                { required: true, message: '账号不可为空', trigger: 'blur' },
              ],
              password: [
                { required: true, message: '密码不可为空', trigger: 'blur' },
              ],
            },
            dialogVisible: false
          };
        },
        methods: {
          onSubmit(formName) {
            this.$refs[formName].validate((valid) => {
              if (valid) {
                this.$router.push("/main/"+this.form.username);
              } else {
                this.dialogVisible = true;
                return false;
              }
            });
          },
          handleClose(key, keyPath) {
            console.log(key, keyPath);
          }
        }
      }
    </script>
    
    <style scoped>
    
    </style>
    

      Main.vue

    <template>
        <div>
          <el-container>
            <el-aside width="200px">
              <el-menu :default-openeds="['1']">
                <el-submenu index="1">
                  <template slot="title">
                    <i class="el-icon-caret-right"></i>
                    <span>用户管理</span>
                  </template>
                  <el-menu-item-group>
                    <el-menu-item index="1-1">
                      <router-link :to="{name:'UserProfile', params: {id: 1}}">个人信息</router-link>
                    </el-menu-item>
                    <el-menu-item index="1-2">
                      <router-link to="/user/list">用户列表</router-link>
                    </el-menu-item>
                    <el-menu-item index="1-3">
                      <router-link to="/goHome">回到首页</router-link>
                    </el-menu-item>
                  </el-menu-item-group>
                </el-submenu>
    
                <el-submenu index="2">
                  <template slot="title">
                    <i class="el-icon-caret-right"></i>
                    <span>内容管理</span>
                  </template>
                  <el-menu-item-group>
                    <el-menu-item index="2-1">分类管理</el-menu-item>
                    <el-menu-item index="2-2">内容列表</el-menu-item>
                  </el-menu-item-group>
                </el-submenu>
              </el-menu>
            </el-aside>
            <el-container>
              <el-header style="text-align: right; font-size: 12px">
                <el-dropdown>
                  <i class="el-icon-setting" style="margin-right: 15px"></i>
                  <el-dropdown-menu slot="dropdown">
                    <el-dropdown-item>个人信息</el-dropdown-item>
                    <el-dropdown-item>退出登录</el-dropdown-item>
                  </el-dropdown-menu>
                </el-dropdown>
                <span>
                  {{name}}
                </span>
              </el-header>
    
              <el-main>
                <router-view></router-view>
              </el-main>
            </el-container>
          </el-container>
        </div>
    </template>
    
    <script>
        export default {
          name: "Main",
          props: ['name']
        }
    </script>
    
    <style scoped>
      .el-header {
        background-color: #2acaff;
        color: #333333;
        line-height: 60px;
      }
      .el-aside {
        color: #333333;
      }
    </style>
    

      router/index.js

    import Vue from 'vue'
    import Router from "vue-router"
    import Main from "../views/Main";
    import Login from "../views/Login";
    
    import UserList from '../views/user/List'
    import UserProfile from '../views/user/Profile'
    
    Vue.use(Router)
    
    export default new Router({
      mode: 'history',
      routes: [
        {
          path: '/main/:name',
          name: 'main',
          component: Main,
          props: true,
          //嵌套路由
          children: [
            {
              path: '/user/list',
              component: UserList,
            },
            {
              path: '/user/profile/:id',
              name: 'UserProfile',
              props: true,
              component: UserProfile,
            }
          ]
        },
        {
          path: '/goHome',
          redirect: '/main'
        },
        {
          path: '/login',
          name: 'login',
          component: Login
        }
      ]
    })
    

      

  • 相关阅读:
    26_多线程_第26天(Thread、线程创建、线程池)
    25_IO_第25天(Properties、序列化流、打印流、CommonsIO)
    24_IO_第24天(转换流、缓冲流)
    23_IO_第23天(字节流、字符流)
    22_IO_第22天(File、递归)
    PHP常用函数
    PHP后台基本语法使用笔记
    java笔记
    springmvc常用注解标签详解
    Java:全局变量(成员变量)与局部变量
  • 原文地址:https://www.cnblogs.com/GumpYan/p/14888441.html
Copyright © 2011-2022 走看看