# quna **Repository Path**: lihann/quna ## Basic Information - **Project Name**: quna - **Description**: 按照教程用vue发开模仿去哪网 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-11-11 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [TOC] # vue 创建项目详解 ## 1.安装vue-cli `vue install -g vue-cli` ## 2.创建项目 `vue init webpack 自定义name` ``` ? Project name (mall) ? Project name mall ? Project description (A Vue.js project) ? Project description A Vue.js project ? Author (Mr_Lih <542356155@qq.com>) ? Author Mr_Lih <542356155@qq.com> ? Vue build (Use arrow keys) ? Vue build standalone ? Install vue-router? (Y/n) y ? Install vue-router? Yes ? Use ESLint to lint your code? (Y/n) Y ? Use ESLint to lint your code? Yes ? Pick an ESLint preset (Use arrow keys) ? Pick an ESLint preset Standard ? Set up unit tests (Y/n) n ? Set up unit tests No ? Setup e2e tests with Nightwatch? (Y/n) n ? Setup e2e tests with Nightwatch? No ? Should we run `npm install` for you after the project has been created? (recom ? Should we run `npm install` for you after the project has been created? (recom mended) npm ``` ## 3.进入刚创建的项目中 运行服务 `cd name` `npm run dev` ## 非父子组件传值 在项目中创建一个 bus.js ````js import Vue from 'Vue' export default new Vue ```` 第二步:在两个需要通信的两个组件中分别引入这个bus.js ` import Bus from '这里是你引入bus.js的路径' // Bus可自由更换喜欢的名字 ` 第三步:传递数据的组件里通过vue实例方法$emit发送事件名称和需要传递的数据。(发送数据组件) ` Bus.$emit('click',data) // 这个click是一个自定义的事件名称,data就是你要传递的数据。 ` 第四步:被传递数据的组件内通过vue实例方法$on监听到事件和接受到数据。(接收数据的组件)这里通常挂载监听在vue生命周期created和mounted当中的一个,具体使用场景需要具体的分析,这里不说这个。 ```js Bus.$on('click',target => {   console.log(target)  // 注意:发送和监听的事件名称必须一致,target就是获取的数据,可以不写target。只要你喜欢叫什么都可以(当然了,这一定要符合形参变量的命名规范) }) ``` 通过以上的四步其实就已经实现了最简单的eventbus的实际应用了。 但是到这儿后,一定要注意一个最容易忽视,又必然不能忘记的东西,那就是**清除事件总线eventBus**. 不手动清除,它是一直会存在的,这样的话,有个问题就是反复进入到接受数据的组件内操作获取数据,原本只执行一次的获取的操作将会有多次操作。如上我所举的例子,只是打印多次传过来的数据。但你想想,实际开发中是不会这么简单的打印这个数据到控制台,本来只会触发并只执行一次,现在变成了多次,这个问题就非常严重了,你们各种脑补具体的项目开发场景吧。 第五步:在vue生命周期beforeDestroy或者destroyed中用vue实例的$off方法清除eventBus ``` beforeDestroy(){ bus.$off('click') } ``` ### 各文件的作用 > 根目录 > > 1.package.json 各种依赖包配置 > > 2.package-lock.json 确定安装的第三方包的版本 > > 3.index.html 首页的模板文件 > > 4.gitignore 上传git 配置 > > 5.eslintrc.js 对代码检查的配置 > > 6.eslintignore 配置那些文件不被检查 > > 7.editorconfig 对编辑器的配置 > static 目录 > > 存放一些静态资源:图片,图标,json数据等 > **src 目录** > > **整个项目的源代码** > > **1.main.js 整个项目的入口文件** > > **2.app.vue 最原始的根组件** > > **router 目录** > > > **index.js 项目的路由** > > **components 目录** > > > **项目使用的小组件** > > **assets 目录** > > > **图片类资源** > config 目录 > > 项目配置文件 > > 1.index.js 基础的配置文件 > > 2.dev.env.js 开发环境的配置文件 > > 3.prod.env.js 线上环境配置文件 > build 目录 > > webpack 打包配置文件 ****** 限制用户放大缩小页面 mete标签 `` ## 正式开始开发 ![开发页面](https://s2.ax1x.com/2019/11/06/MC0Fb9.png) > 安装 stylus `npm install stylus -s` `npm install stylus-loader -s` > > 实现组件化,在src/home目录下创建components目录来存放组件 ## 1.头部组件 在src/home/components 创建header.vue 并在home.vue中 import 引入: > home.vue中: > > ```