vue项目搭建

Vue项目环境搭建

node ~~ python:node是用c++编写用来运行js代码的
npm(cnpm) ~~ pip:npm是一个终端应用商城,可以换国内源cnpm
vue ~~ django:vue是用来搭建vue前端项目的

1) 安装node
官网下载安装包,傻瓜式安装:https://nodejs.org/zh-cn/

2) 换源安装cnpm
>: npm install -g cnpm --registry=https://registry.npm.taobao.org

3) 安装vue项目脚手架
>: cnpm install -g @vue/cli

注:2或3终端安装失败时,可以清空 npm缓存 再重复执行失败的步骤
npm cache clean --force

代码创建项目

vue creat 项目名
// 要提前进入目标目录(项目应该创建在哪个目录下)
// 选择自定义方式创建项目,选取Router, Vuex插件

可视化创建项目

 cmd中写vue ui

 

 

 

 

 pycharm 管理vue项目

 项目目录介绍

项目生命周期

* 1、启动项目,加载主脚本文件 main.js
* 加载Vue环境,创建根组件完成渲染
* 加载系统已有的第三方环境:router、store
* 加载自定义的第三方环境与自己配置的环境:后期项目不断添加
*
* 2、router被加载,就会解析router文件夹下的index.js脚本文件,完成 路由-组件 的映射关系
*
* 3、新建视图组件.vue(在views文件夹中),在路由中配置(在router的index.js中),设置路由跳转(在导航栏组件中Nav.vue)

 

 

vue请求生命周期:
浏览器请求/user => router插件映射User.vue组件 => User.vue组件替换App.vue中的<router-view />占位符
注: i) 可以用 <router-link to="/user">用户页</router-link>完成标签跳转
ii) this.$router.push('/user')完成逻辑跳转

文件式组件

views组件里面用components里面的小组件,要先注册

<!--
template标签负责组件的html结构:有且只有一个根标签
-->
<template>
    <div class="home">
        <Nav />
        <h1>主页</h1>
    </div>
</template>

<!--
script标签负责组件的js逻辑:逻辑固定导出 export default {组件内容}
(外界才可以导入)
-->
<script>
    import Nav from '../components/Nav'

    export default {
        data(){
            return {
                back_data: ''
            }
        },
        methods: {},
        components: {
            Nav,
        },
    }
</script>

<!--
style标签负责组件的css样式:scoped保证样式的组件化 - 样式只在该组件内部起作用
-->
<style scoped>
</style>

配置自定义全局样式

在src文件下的assets下面的css文件中写全局的css样式

再到main.js里面配置,才会起作用(加载写的css文件,有文件后缀)

配置全局样式:@就代表src文件夹的绝对路径(可以用..来查找路径),官方提倡require加载静态文件

 

路由跳转逻辑

 路由重定向

 生命周期钩子

表示一个vue实例从创建到销毁的这个过程,将这个过程的一些时间节点赋予了对应的钩子函数

钩子函数: 满足特点条件被回调的方法

生命周期钩子
1)一个组件从创建到销毁的众多时间节点回调的方法
2)这些方法都是vue组件实例的成员
3)生命周期钩子的作用就是满足在不同时间节点需要完成的事
<script>
    import Nav from '../components/Nav'

    export default {
        data(){
            return {
                back_data: ''
            }
        },
        methods: {},
        components: {
            Nav,
        },
        /**  生命周期钩子
         * 1)一个组件从创建到销毁的众多时间节点回调的方法
         * 2)这些方法都是vue组件实例的成员
         * 3)生命周期钩子的作用就是满足在不同时间节点需要完成的事
         */
        beforeCreate() {
            console.log('Home组件要创建了');
            console.log(this.back_data);
        },
        created() { // 重要方法:在该钩子中完成后台数据的请求
            console.log('Home组件创建成功了');
            console.log(this.back_data);
        },
        beforeMount() {
            console.log('Home组件准备加载')
        },
        mounted() {  // 特别耗时的数据请求,可以延后到组件初步加载成功后,再慢慢请求
            console.log('Home组件加载完成')
        },
        destroyed() {
            console.log('Home组件销毁成功了')
        }
    }
</script>

 前台静态资源加载

路由传参方式

方式一:

先在index中配路由  path: '/course/detail'

传 `/course/detail?pk=${pk}`  this.pk = this.$route.query.pk

方式一:

先在index中配路由  path: '/course/:pk/detail'

传  `/course/${pk}/detail` 收  this.$route.params.pk

传:

<template>
    <div class="course-tag">
        <!--点击图片 逻辑跳转(事件)-->
        <img :src="course.img" alt="" @click="goDetail(course.id)">

        <!--第一种路由传 -->
        <!--点击文字跳转方法一-->
        <router-link :to="`/course/detail?pk=${course.id}`">{{ course.title }}</router-link>

        <!--点击文字跳转方法二-->
        <router-link :to="{
            name: 'course-detail',
            query: {pk: course.id}
        }">{{ course.title }}
        </router-link>

        <!--第二种路由传参-->
         <!--点击 标签跳转-->
        <router-link :to="`/course/${course.id}/detail`">{{ course.title }}</router-link>


    </div>
</template>

<script>
    export default {
        name: "CourseTag",
        props: ['course'],
        methods: {
            goDetail(pk) {
                //路由传参方法一
                this.$router.push(`/course/detail?pk=${pk}`);
                //路由传参方法二
                this.$router.push(`/course/${pk}/detail`);
                
                this.$router.push({
                    name: 'course-detail',
                    query: {pk: pk}
                });
            }
        }
    }
</script>

<style scoped>
    .course-tag {
        width: 200px;
        border-radius: 10px;
        overflow: hidden;
        background-color: #eee;
        float: left;
        margin: 10px;
    }

    .course-tag img {
        width: 100%;
        height: 240px;
    }

    .course-tag a {
        text-align: center;
        font-weight: normal;
        font-size: 20px;
        display: block;
    }
</style>

收:

<template>
    <div class="course-detail">
        <!--不写this.$router,在标签直接写,在逻辑中要加this-->
        <button @click="$router.go(-1)">返回课程主页</button>
        <hr>
        <h1>第{{ pk }}个课程的详情</h1>
    </div>
</template>

<script>
    export default {
        name: "CourseDetail",
        data() {
            return {
                pk: 0
            }
        },
        created() {
            // 获取路由传递的参数:课程的id
            // console.log(this.$route);
            // console.log(this.$route.query.pk);
            this.pk = this.$route.query.pk || this.$route.params.pk;
        }
    }
</script>

<style scoped>

</style>
原文地址:https://www.cnblogs.com/fjn839199790/p/12070023.html