vue-cli及vue-router
1.单文件组件
(1)问题:
使用 Vue.component 来定义全局组件,紧接着用 new Vue({ el: ‘#container ‘}) 在每个页面内指定一个容器元素。当在更复杂的项目中,或者你的前端完全由 JavaScript 驱动的时候,这种做法的缺点很多:
全局定义 (Global definitions) 强制要求每个 component 中的命名不得重复
字符串模板 (String templates) 缺乏语法高亮,在 HTML 有多行的时候,需要用到丑陋的 \
不支持 CSS (No CSS support) 意味着当 HTML 和 JavaScript 组件化时,CSS 明显被遗漏
没有构建步骤 (No build step) 限制只能使用 HTML 和 ES5 JavaScript, 而不能使用预处理器,如 Pug (formerly Jade) 和 Babel。
(2)单文件组件
文件扩展名为 .vue 的 single-file components(单文件组件) 为以上所有问题提供了解决方法,并且还可以使用 webpack 或 Browserify 等构建工具。
(3)解析打包.vue文件
vue为了能够使我们在项目开发中对组件进行更好的维护,提供了一个单文件组件系统,vue把每一个独立的组件放在一个.vue的文件中,在这个文件中提供基础三个自定义标签:
template
script
style
来放置组件不同的内容块,但是因为浏览器不能够直接去识别该文件类型,所以我们需要通过webpack来进行编译打包,官方提供了一个对 .vue 文件进行处理的loader:vue-loader。
(4)注意:如果出现了如下的提示:
ERROR in ./src/Hello.vue
Module build failed: Error: Cannot find module ‘vue-template-compiler’
还需下载“vue-template-compiler”第三方模块并引入。
<code>
<template>
<h1>{{message}}</h1>
</template>
<script> export default { name: 'hello', data() { return { message: 'Hello Miaov' } } } </script>
<style></style>
</code>
2.vue-cli
vue实际开发使用 .vue 的但组件系统来实现,但是不能适应实际复杂的需求,我们还需要配置很多的一些东西来和 .vue 进行融合,这个配置很繁琐,所以官方提供了一个工具,帮助我们来构建一个项目开发过程中必须使用的一些内容,这个工具:vue-cli,通过这个工具我们就可以很方便的来创建一个基于vue的项目,我们也把这个工具称为 脚手架。
Vue.js 提供一个官方命令行工具,可用于快速搭建大型单页应用。该工具提供开箱即用的构建工具配置,带来现代化的前端开发流程。只需几分钟即可创建并启动一个带热重载、保存时静态检查以及可用于生产环境的构建配置的项目:
安装
前提:先安装npm或yarn。
npm install vue-cli -g或yarn global add vue-cli命令。
vue-cli的构建
当我们通过上述方式安装好vue的脚手架以后,我们就可以在命令行中使用一个命令:vue(该命令是没有-cli的)
1.vue-cli创建步骤:
(1)vue init
init:初始化(创建)基于vue的项目
:构建模板的名称:常用的是 webpack,其他的可以参考:https://github.com/vuejs-templates
:要构建的项目的名称
如:vue init webpack hello:基于webpack来构建一个名称为hello的vue项目(项目构建一定要联网!联网!联网!)
vue-cli是一个交互式命令行,通过vue命令构建项目会需要我们填写一些项目的信息:
(2)Project Name:要创建的项目名称(该命令会生产一个package.json文件,文件中的name选项就是这个ProjectName,默认为当前创建的项目目录名称,也可以自行制定(但是需要符合package.json中name命名规则,不要出现大写字母,空格,下划线,可以使用 - )
(3)Project Description:项目简介,也会出现在package.json文件中,可选
(4)Author:作者,可选
(5)下一步直接回车
(6)nstall vue-router:是否安装vue路由组件,做项目的话一定要安装;
(7)Use ESLint to lint your code:是否需要使用ESLint模块进行代码检测。语法检测工具,一般正规的项目团队中需要安装,个人项目看自己的使用情况决定
(8)Setup unit tests with Karma + Mocha?:是否安装测试(单元测试)
(9)Setup e2e tests with Nightwatch?:是否安装端到端的测试
完成上面步骤,over!
下载依赖包:”npm install”
通过vue-cli完成配置以后,下一步需要安装vue所需要的依赖包,在该创建好的项目目录中,运行”npm install”命令。
项目需要安装的依赖包在vue-cli工具自动生成的package.json文件中有说明:
dependencies:项目中实际需要使用到的依赖包
devDependencies:项目开发过程中需要使用的一些工具包,不是项目实际线上代码的一部分。
2.运行
所需要的安装依赖包安装完成以后,就可以启动项目,运行
yarn run dev / npm run dev:开启一个测试开发环境。会开启一个本地服务器,我们就可以通过该服务器环境去访问当前这个项目。
yarn run build/npm run build:
构建项目,把项目进行编译、打包,生成的文件默认存放在dist目录下。我们可以把项目打包后的文件上传到服务器,就是我们在线上运行需要的代码。
界面:如果是首次运行,那么会看到一个欢迎页面,下面我们就可以进行项目开发。
3.生成的项目的目录结构
(1) build目录:构建项目命令所需要使用到的工具相关的脚本文件和配置文件
(2) config目录:在vue-cli中会自动安装一个小型的express搭建的热重载web服务器,config里面就是关于这个服务器的相关配置
(3) dist目录:项目编译构建上线后的存放目录
(4) node_modules目录:项目依赖包存放目录
(5) src 目录:项目源代码存放目录
main.js:vue脚手架为我们自动生成的项目中设置的入口文件,在该入口文件中,做了一些项目初始化的工作
引入 Vue
引入必要的组件
创建Vue实例
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
// 导入 Vue 框架
import Vue from 'vue'
// 导入 App 组件对象
import App from './App'; import router from './router/index';
// 设置项目开发提示
Vue.config.productionTip = false;
// 创建Vue实例对象
new Vue({
el: '#app', // router: router,
router,
template: '<App/>',
components: { App }
})
6) static目录:配置静态资源(内置的web服务器对应)存放目录
在项目开发过程中,我们的大部分任务是在src这个目录下完成的。
2.路由
需求
当我们的应用变得复杂了以后,涉及到的页面也会变多,逻辑也会变复杂,原来我们是通过多页面的方式来组织和维护我们的网站,但是这样的用户体验不是太好(因为会刷新或跳转页面),为了解决用户体验问题,最好的方式,数据(页面会发生变化),但是不需要跳转、刷新。
通过ajax异步无刷新获取数据
获取到数据以后通过vue来处理和管理还有渲染页面。
什么情况下获取数据渲染页面?
传统的处理方式:通过url重新发送请求得到新的数据和页面,获取什么页面数据由url来决定,使用了单页面开发模式的话,就不能再使用页面跳转,但是可以使用url中的hash值的变化来决定获取什么内容渲染什么页面。
所以一个url的hash对应一个视图,那么我们就需要设置hash和视图的关系,我们可以把hash和view做一个对应关系(映射)
- 设置hash-view的map(映射)关系
- 监听hash变化
- 当hash值变化的时候,根据map找到对应的组件来渲染视图。
vue为我们提供了一个第三方的框架来实现上述的功能:vue-router
上面我们提到的 地址-视图 的映射:路由
vue-router
1.安装:
npm install vue-router / yarn add vue-router.
若在构建vue-cli的时候,在询问“nstall vue-router”(是否安装vue-router)时,选择“Y”,这里就不用重复安装vue-router。
2.配置路由步骤:
(1) 配置: “router/index.js”
导入 vue-router
把vue-router作为插件调用:Vue.use();
Vue.use( plugin )
参数:{Object | Function}
用法:
安装 Vue.js 插件。如果插件是一个对象,必须提供 install 方法。如果插件是一个函数,它会被作为 install 方法。install 方法将被作为 Vue 的参数调用。
也就是说,“plugin”必须提供一个install方法以供vue自动调用。
new Router()得到一个路由对象,并把该对象添加到Vue实例的router属性中
new Router()需要传入一个配置对象,该对象中包含一个routes的属性,这个属性就保存了路由组件的映射关系
import Vue from 'vue';
import VueRouter from 'vue-router';
import Register from '@/components/Register';
import Login from '@/components/Login';
// 注册vue-router组件到Vue实例中,才能在组件中使用<router-view /> 组件</br>
Vue.use(VueRouter);
// 创建一个vuerouter实例对象,用来处理路由和组件的映射,该构造函数接受一个对象,其中routes
export default new VueRouter({
routes: [ {
//路由路径
path: '/register',
//路由名称(非必须)
name:"reg",
//路由组件
component: Register
}, {
path: '/login',
name:"login",
component: Login
} ] });
(2) “main.js”
- import router from ‘./router/index’;
在vue实例中添加“router: router”属性
import Vue from 'vue';
import App from './App';
import router from './router/index';
new Vue({
el: '#app',
//router: router,
router,
template: '<App/>',
components: { App }
})(3) “App.vue”
渲染和当前url中匹配的路由组件:“”。
vue-router会把和当前匹配路由组件拿取出来,替换这里的router-view。<template>
<div id="app">
<List :data="searchUsers" />
// router-view:用来放置和当前url地址匹配的组件内容
<router-view></router-view>
</div>
</template>
<script></script>
<!--scoped:设置该属性,那么style中的样式只对当前组件中的元素产生影响-->
<style scoped>
ul li { color: red; }
</style>注意:
(a).vue2.5版本支持大写的HTML标签,如上文代码“”;
vue2.0还是烤串写法;
(b).“App.vue”文件导入时,可以不写扩展名,是因为在“bulid/webpack.base.conf.js”文件中,已帮我们解析好;(c).在 “router/index.js”中,“import Login from ‘@/components/Login’;”,
“@”指的是src目录,也是在在“bulid/webpack.base.conf.js”文件已帮我们定义好。resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': resolve('src'),
}
},(d).在上述代码中,”
<style scoped></style>
“,单文件组件让你可以在同一个文件里完全控制 CSS,将其作为组件代码的一部分。
这个可选 scoped 属性会自动添加一个唯一的属性 (比如 data-v-21e5b78) 为组件
内 CSS 指定作用域,编译的时候 .list-container:hover 会被编译成类似 .list-container[data-v-21e5b78]:hover。这里的数字是随机生成的。
本文转载自:https://blog.csdn.net/qianxing111/article/details/78526000
vue-cli及vue-router的更多相关文章
- [Vue CLI 3] vue inspect 的源码设计实现
首先,请记住: 它在新版本的脚手架项目里面非常重要 它有什么用呢? inspect internal webpack config 能快速地在控制台看到对应生成的 webpack 配置对象. 首先它是 ...
- 使用@vue/cli搭建vue项目开发环境
当前系统版本 mac OS 10.14.2 1.安装node.js开发环境 前端开发框架和环境都是需要 Node.js vue的运行是要依赖于node的npm的管理工具来实现 <mac OS ...
- Vue CLI及其vue.config.js(一)
有时候我们为了快速搭建一个vue的完整系统,经常会用到vue-cli,vue-cli用起来很方便而且命令简单容易上手,但缺点是在构建的时候我感觉有一些慢,因为CLI 服务 (@vue/cli-serv ...
- 利用脚手架vue cli搭建vue项目
vue.js https://vuejs.org/ 基础: http://cn.vuejs.org/v2/guide/installation.html 1.安装需要利用npm包管理器,所以首先安装n ...
- 使用Vue CLI构建Vue项目
第一步:首先在控制台输入vue --version,如果出现版本号则进入第三步:否则进入第二步: 第二步:输入npm install cnpm -g --registry=https://regist ...
- [Vue CLI 3] @vue/cli-plugin-eslint 源码分析
熟悉 eslint-loader 的同学一般如下配置: 设置一下几项: test : A condition that must be met(一般是处理对应文件的正则) exclude : A co ...
- [转]Vue CLI 3搭建vue+vuex 最全分析
原文地址:https://my.oschina.net/wangnian/blog/2051369 一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@ ...
- Vue CLI 3搭建vue+vuex 最全分析
一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@vue/cli 全局安装的 npm 包,提供了终端里的vue命令(如:vue create .vue ...
- 前端——Vue CLI 3.x搭建Vue项目
一.Node安装 windows 1. Node.js (>=8.9, 推荐8.11.0+) Node官网下载 .msi 文件,按步骤下载安装即可. 安装完之后在cmd中输入 node -v,若 ...
- Vue CLI 5 和 vite 创建 vue3.x 项目以及 Vue CLI 和 vite 的区别
这几天进入 Vue CLI 官网,发现不能选择 Vue CLI 的版本,也就是说查不到 vue-cli 4 以下版本的文档. 如果此时电脑上安装了 Vue CLI,那么旧版安装的 vue 项目很可能会 ...
随机推荐
- HttpContext & HttpRuntime
问题引出 HttpContext.Current.Cache .VS. HttpRuntime.Cache HttpRuntime.Cache:获取当前应用程序的Cache HttpContext.C ...
- poi 读取word 遍历表格和单元格中的图片
背景 项目需要解析word表格 需要批量导入系统,并保存每行信息到数据库 并且要保存word中的图片, 并保持每条信息和图片的对应关系 一行数据可能有多条图片 解决办法 没有找到现成的代码,怎么办呐? ...
- c# 属性说明
- 阿里云ECS配置JDK和tomcat
一.配置JDK 1.利用Xftp连接ECS 2.新建文件夹 在ECS上新建一个放压缩包的文件夹,便于整理 (此处也可以在xshell中利用代码新建mkdir /home/temp) 3.将下载好的JD ...
- [Jenkins][GitHub]2 持续集成环境初探
预计阅读时间:30分钟 部署环境:Jenkins ver. 2.61 + Centos7 + Java 1.8 参考链接: http://www.jianshu.com/p/22b7860b4e81 ...
- Codeforces 1206 D - Shortest Cycle
D - Shortest Cycle 思路:n大于某个值肯定有个三元环,否则floyd找最小环. 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) ...
- python(动态传参、命名空间、函数嵌套、global和nonlocal关键字)
一.函数的动态传参 1.*args位置参数动态传参 def chi(*food): print(food) chi("烧烤","火锅","虾吃虾涮&q ...
- python----PySnooper获取打印日志
官网链接:https://pypi.org/project/PySnooper/ 安装:pip install PySnooper 使用方式,直接 导入import pysnooper,添加装饰器 ...
- html学习 菜鸟
1HTML 不是一种编程语言,而是一种标记语言 2只有 <body>区域才会在浏览器中显示. 3<!DOCTYPE>声明有助于浏览器中正确显示网页.doctype 声明是不区分 ...
- Spring Data JPA 提供的各种Repository接口作用
各种Repository接口继承关系: Repository : public interface UserRepository extends Repository<User, Integer ...