目录
Vue项目创建
1) 进入存放项目的目录 >: cd vue_project 2) 创建项目 >: vue create v-proj 3) 项目初始化
- 输入
npm run serve
初始化项目
pycharm配置并启动vue项目
1) 用pycharm打开vue项目 2) 添加配置npm启动
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等配置文件
js原型补充
function A() {} let a1 = new A(); let a2 = new A(); // 为A类添加原型 类似于类属性 A.prototype.num = 100; console.log(a1.num); console.log(a2.num); // ES6语法下的类 class B { constructor(name) { this.name = name } } let b1 = new B('cwz'); let b2 = new B('neo'); B.prototype.count = 666; console.log(b1.count); console.log(b2.count); console.log(b1.name); console.log(b2.name);
vue项目生命周期
全局脚本文件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' import App from './App.vue' import router from './router' import store from './store' Vue.config.productionTip = false // 创建根组件 new Vue({ // 挂载、 渲染挂载点 el: '#app', router: router, // 把路由、仓库配置到vue对象中 store: store, render: function (read_vue_fn) { return read_vue_fn(App) } });
启动项目,加载主脚本文件 mian.js,加载vue环境, 创建根组件完成渲染;加载系统已有的第三方环境:router、store;加载自定义的第三方环境与自己配置的环境,后期项目不断添加
router被加载,就会解析router文件夹下的index.js脚本文件,完成路由-组件 的映射关系
新建视图组件.vue(在views文件夹中), 在路由中配置(在router的index.js中),设置路由跳转(在导航栏组件中)
<router-link to="/user">去用户页面</router-link> 完成标签跳转 this.$router.push('/user') 完成逻辑跳转
页面组件
views文件夹下新建Home.vue
<!-- template标签负责组件的html结构,有且只有一个根标签 --> <template> <div class="home"> <h1>主页</h1> <hr> <Nav></Nav> </div> </template> <!-- script标签负责组件的js逻辑:逻辑固定导出(外界才可以导入) --> <script> import Nav from '../components/Nav' export default { data() { return {} }, methods: {}, components: { Nav, } } </script> <!-- style标签负责组件的css样式: scoped保证样式的组件化 样式只在该组件内部起作用 --> <style scoped> </style>
根组件 App.vue
:
<template> <div id="app"> <!--页面组件占位符--> <router-view/> </div> </template>
配置自定义全局样式
在mian.js
中配置:
// 配置全局样式 @就代表src文件夹的绝对路径 // import '@/assets/css/global.css' // import './assets/css/global.css' require('./assets/css/global.css'); // 官方提倡required加载静态文件
路由逻辑跳转
this.$router 控制路由跳转 this.$route 控制路由数据 this.$router.push('/') 往下再跳转一页 this.$router.go(-2) go是历史记录前进后退, 正为前进,负为后退,数字为步数 // router文件夹 index.js中 const routes = [ { path: '/', name: 'home', component: Home }, { path: '/course', name: 'course', component: Course }, ] // 其中name的用法: <router-link :to="{name: 'course'}">课程页</router-link>
路由重定向
const routes = [ { path: '/', name: 'home', component: Home }, { path: '/home/', redirect: '/', }, ]
组件的生命周期钩子
- 一个组件从创建到销毁的众多时间节点回调的方法
- 这些方法都是vue组件 实例的成员
- 生命周期钩子的作用就是满足不同时间节点需要完成的事
new Vue({ el: "#app", data: { msg: "message" }, beforeCreate () { console.log("组件要创建了"); console.log(this.msg); }, created () { // 在该钩子中完成后台数据的请求 console.log("实例创建成功, data, methods已拥有"); console.log(this.msg); }, beforeMount() { console.log("组件准备加载") }, mounted () { // 特别耗时的数据请求,可以延后到组件初步加载成功,再慢慢请求 console.log("组件加载完成"); }, destroyed() { console.log("组件销毁成功了") } // 拿到需求 => 确定钩子函数 => 解决需求的逻辑代码块 })
路由传参
第一种:
{ path: '/course/detail', name: 'course-detail', component: CourseDetail } { path: '/detail', redirect: '/course/detail' } this.$router.push('/course/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
来源:https://www.cnblogs.com/setcreed/p/12070774.html