vue_04day 路由初始

vue_04 项目初始:

vue 文件构造:

1.vue 文件:
	# 1) template:有且只有一个根标签
    # 2) script:必须将组件对象导出 export default {}
    # 3) style: style标签明确scoped属性,代表该样式只在组件内部起作用(样式的组件化)
    
2.vue文件 必须先export default {} 倒出,才会被使用·

3.vue 文件样式:

<template>
    <div class="test">
        
    </div>
</template>

<script>
    export default {
        name: "Test"
    }
</script>

<style scoped>  //只属于该文件的样式

</style>


vue项目目录结构:

 #vue项目目录结构分析

```
├── v-proj
|	├── node_modules  	// 当前项目所有依赖,一般不可以移植给其他电脑环境
|	├── public			
|	|	├── favicon.ico	// 标签图标
|	|	└── index.html	// 当前项目唯一的页面
|	├── src
|	|	├── assets		// 静态资源img、css、js
|	|	├── components	// 小组件
|	|	├── views		// 页面组件
|	|	├── App.vue		// 根组件
|	|	├── main.js		// 全局脚本文件(项目的入口)
|	|	├── router
|	|	|	└── index.js// 路由脚本文件(配置路由 url链接 与 页面组件的映射关系)
|	|	└── store	
|	|	|	└── index.js// 仓库脚本文件(vuex插件的配置文件,数据仓库)
|	├── README.md
└	└── package.json等配置文件
```

项目入口(main.js):

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'

Vue.config.productionTip = false

new Vue({
    router,
    store,
    render: h => h(App)
}).$mount('#app')

解析:
import Vue from 'vue'  // 加载vue环境
import App from './App.vue'  // 加载根组件
import router from './router'  // 加载路由环境
import store from './store'  // 加载数据仓库环境

Vue.config.productionTip = false  (app软件启动时的tip指引)
new Vue({
    el: '#app',
    router, // router = router
    store,
    render: function (readFn) {
        return readFn(App);   //替换
    },
});

vue项目启动生命周期:

简单的请求流程:
1) 加载mian.js启动项目
	1) 加载mian.js启动项目
	i) import Vue from 'vue' 为项目加载vue环境
	ii) import App from './App.vue' 加载根组件用于渲染替换挂载点
	iii) import router from './router' 加载路由脚本文件,进入路由相关配置
	
2) 加载router.js文件,为项目提供路由服务,并加载已配置的路由(链接与页面组件的映射关系)
	注:不管当前渲染的是什么路由,页面渲染的一定是根组件,链接匹配到的页面组件只是替换根组件中的
	<router-view></router-view>
	
3) 如果请求链接改变(路由改变),就会匹配新链接对应的页面组件,新页面组件会替换渲染router-view标签,替换掉之前的页面标签(就是完成了页面跳转)

根组件(vue.js):

<template>
    <div id="app">
        <!-- url路径会加载不同的页面组件
            eg:/red => RegPage  | /blue => BluePage
         来替换router-view标签,完成页面的切换
         -->
        <router-view></router-view>
    </div>
</template>

文件结构内容不变动!!!

router.js:

import 别名 from './views/xxxx'  #导入的文件

export default new Router({
    mode: 'history',
    base: process.env.BASE_URL,
    routes: [
        {
            path: '/xx',
            name: 'xxx',
            component: xx     导入的文件(.vue)
      },

创建的页面:

eg:
    <template>
    <div class="blue-page">
        <Nav></Nav>
    </div>
</template>
<script>
    import Nav from '@/components/Nav'
    export default {
        name: "BluePage",
        components: {
            Nav
        }
    }
</script>
<style scoped>
    .blue-page {
         100vw;
        height: 100vh;
        background-color: blue;
    }
</style>

全局样式文件配置(css样式):

# assets/css/global.css

html, body, h1, h2, ul, p {
    margin: 0;
    padding: 0;
}
ul {
    list-style: none;
}
a {
    color: black;
    text-decoration: none;
}

main.js配置:

import '@/assets/css/global.css'  
require('@/assets/css/global.css');

js类的原型:类属性

<script>

    function A() {}
    
    let a1 = new A();
   
    // 为A类添加原型 => 类似于类属性
    A.prototype.num = 100;

    console.log(a2.num);-->100

    // ES6语法下类
    class B {
        constructor(name) {  // 定义方法
            this.name = name;
        }
    }
    let b1 = new B('Tom');
    let b2 = new B('Ben');
    B.prototype.count = 666;

    console.log(b2.count);---》666

    console.log(b1.name);
    console.log(b2.name);

    // 推导
    Vue.prototype.$ajax = 12345;
    // this.$ajax

</script>

vue组件的生命周期钩子:

    1)一个组件从创建到销毁的整个过程,就称之为组件的生命周期
    # 2)在组件创建到销毁的过程中,会出现众多关键的时间节点,如 组件要创建了、组件创建完毕了、组件数据渲染完毕了、组件要被销毁了、组件销毁完毕了 等等时间节点,每一个时间节点,vue都为其提供了一个回调函数(在该组件到达该时间节点时,就会触发对应的回调函数,在函数中就可以完成该节点需要完成的业务逻辑)
    # 3)生命周期钩子函数就是 vue实例 成员


# 任何一个组件:在vue组件的script的export default导出字典中直接写钩子函数

export default {
    // ...
    beforeCreate() {
        console.log('组件创建了,但数据和方法还未提供');
        // console.log(this.$data);
        // console.log(this.$options.methods);
        console.log(this.title);
        console.log(this.alterTitle);
    },
    // 该钩子需要掌握,一般该组件请求后台的数据,都是在该钩子中完成
    // 1)请求来的数据可以给页面变量进行赋值
    // 2)该节点还只停留在虚拟DOM范畴,如果数据还需要做二次修改再渲染到页面,
    //  可以在beforeMount、mounted钩子中添加逻辑处理


  beforeCreate() {
            console.log('开始创建组件');
            console.log(this.title);
            console.log(this.printTitle);
            this.title = '呵呵';
        },
        created() {  // 重点
            console.log('组件创建成功');
            console.log(this.title);
            console.log(this.printTitle);
            // 请求后台数据,完成数据的更新
            this.title = '嘿嘿';
        },
        beforeMount() {
            console.log('组件开始渲染');
        },
        mounted() {
            console.log('组件渲染成功');
            this.title = '嘻嘻';
        },
        beforeUpdate() {
            console.log('数据开始更新');
        },
        updated() {
            console.log('数据更新完毕');
        },
        activated() {
            console.log('组件激活');
        },
        deactivated() {
            console.log('组件停用');
        },
        destroyed() {
            console.log('组件销毁成功');
        }

路由跳转方式:

this.$router.push({name: '路由名', query: {拼接的参数}})
this.$router.go(number)  //前进 | 后退


路由配置:
方式一:
	{
	path: '/course/detail',
	name: 'course-detail',
    component: CourseDetail
    }
    {
        path: '/detail',
        redirect: '/course/detail'
    }
    this.$router.push('/course/detail');  ==  this.$router.push('/detail');
    this.$router.push('/course/detail?pk=1');  => this.$route.query.pk

方式二:

{
	path: '/course/detail/:pk',
	name: 'course-detail',
    component: CourseDetail
}
this.$router.push('/course/detail/10');  => this.$route.params.pk

路由小结:

 概括: 
    1)路由配置:router/index.js
    2)路由跳转与路由渲染:router-link、router-view、$router.push、$router.go
    3)路由传参:两种传参

新增页面三步骤:
    1) 在views文件夹中创建视图组件

    2) 在router.js文件中配置路由

    3) 设置路由跳转,在指定路由下渲染该页面组件(替换根组件中的router-view标签)
原文地址:https://www.cnblogs.com/shaozheng/p/12070657.html