; }: ^6 I Q/ V4 R/ E P+ j. j, d* {4 n7 r- X
VantUI+ ~; o" k! d3 Q- i% w* i0 Z
P& a6 w% l8 _' E# s& X 0 E% T. K: {. W- H8 w' A( ~3 mVant UI是有赞前端团队基于有赞统一的规范实现的Vue组件库, 提供了-整套UI基础组件和业务组件。通过Vant, 可以快速搭建出风格统一的页面,提升开发效率。 E: u1 ~! p3 g* N4 d/ E9 b 9 _' W2 c: n. I! H2 n9 v) w' ~$ @* q( w' y) O, |/ b$ ~ S( ^
官网地址 ( ?/ V+ V5 D- k( nGithub / f. z1 v) y1 w# HAtUI3 G4 D! {3 Y. P' W
( r. S# c& H2 r3 L, x$ i4 z / T$ k& V: Y" Yat-ui是一款基于Vue 2.x的前端UI组件库, 主要用于快速开发PC网站产品。它提供了一套n pm+web pack+babel前端开发工作流程, CSS样式独立, 即使采用不同的框架实现都能保持统一的UI风格。2 W7 U5 y( k2 ^( W0 b j; ?
·官网地址 + e, M5 e# R2 y5 x·Git hub / H5 S; o9 q; E5 }. ]* y- w # C9 s* \3 ^+ R3 L' p6 l% [ z) ~/ E' W! n' c) ~
Cube Ul # k1 j0 F* x1 o, ~( J! ~( t ' S `1 Q" A5 h$ _5 T. q! X8 R9 |
cube-ui是滴滴团队开发的基于Vue js实现的精致移动端组件库。支持按需引入和后编译, 轻量灵活;扩展性强,可以方便地基于现有组件实现二次开发。: A! h7 _) s: ]$ L: v2 F
9 e8 F! m4 w! R, i, e: A
+ Z& K5 b% Z) z& G; ]% `: w1 e
官网地址: y! i1 q3 `* r' W& H1 D
Github / n( d3 l. N8 \混合开发 * u9 ~& J" `( Y# G- _3 p& S* `" @7 G' `/ v& F& A
5 ^5 L% ~2 r+ i/ T- }8 R# pFlutter " y% R% T v- Q! p6 D) B3 X 4 Y' ]( O5 j- @; }5 f- n6 [) d4 ]8 Y H1 D( Z# u1 S
Flutter是谷歌的移动端UI框架, 可在极短的时间内构建Android和iOS上高质量的原生级应用。Flutter可与现有代码一起工作, 它被世界各地的开发者和组织使用, 并且Flutter是免费和开源的。2 K+ r, s/ L; K
; Q! k# p& Z1 Y) {; R
% L! m$ h. u, V6 _8 u6 f官网地址. l& e+ M0 ]( o* C. q' O
Github% i [6 L2 P: B
备注:Google出品, 主要特点是快速构建原生APP应用程序, 如做混合应用该框架为必选框架 : H k( H5 M. t! u) `7 A" }lonic5 B6 c0 I& W/ f8 M) b
8 t2 J9 N" q% X* p. P
9 b) B5 } c" x) o, L9 p3 t: Z# |lonic既是一个CSS框架也是一个Javascript UI库, lonic是目前最有潜力的一款HTML 5手机应用开发框架。通过SASS构建应用程序, 它提供了很多UI组件来帮助开发者开发强大的应用。它使用JavaScript MV VM框架和Angular JS/Vue来增强应用。提供数据的双向绑定, 使用它成为Web和移动开发者的共同选择。$ R Y& x9 e+ B, ?
. k4 M$ m* O3 i% W* d5 ? M. z$ J, p, T
' |7 E) b8 T7 J官网地址 1 L% F i# k+ q2 G$ G' S H; Y·官网文档 5 c( Q& R5 }6 A Q4 Q& K·Git hub 3 m( g2 }: Y, |; N* B ! o, m2 p5 Q& n4 W : | Z" J; \/ S微信小程序 3 l& {0 C" {; Y0 S8 l( b, E4 z% r |1 w- P6 y
/ |2 F+ g$ m! d
mpvue / `5 S8 n6 k5 Z5 a " d5 U4 ]$ g- k a( L6 ~. r* J1 u: Q* i8 ^2 ?6 |8 I l, h
mpvue是美团开发的一个使用Vue.js开发小程序的前端框架, 目前支持微信小程序、百度智能小程序,头条小程序和支付宝小程序。框架基于Vue.js, 修改了的运行时框架runtime和代码编译器compiler实现, 使其可运行在小程序环境中, 从而为小程序开发引入了Vue.js开发体验。 ' U, {$ x' z3 y5 Y, N" m [8 S" X·官网地址( b3 [9 Y5 p& R9 w" g
·Git hub : a( H% o; P9 }8 o! H; v0 v/ C备注:完备的Vue开发体验, 井且支持多平台的小程序开发, 推荐使用( Z! M' J) b4 B' L; L. q
5 @) M9 p2 k. ~; L( k$ Z+ [
& z, S! [: H7 E/ k) V1 p r 9 Y6 z6 J X2 r$ ^- v" K2 `EcmaScript 6标准增加了JavaScript语言层面的模块体系定义。ES 6模块的设计思想, 是尽量静态化, 使编译时就能确定模块的依赖关系, 以及输入和输出的变量。Commons JS和AMD模块,都只能在运行时确定这些东西。, @. r) D& \# G+ {; l' z! T- c; }7 C
- `* N% G5 y; [ w3 w. h2 S5 t1 z9 W$ u' z# ?4 N$ x: u
import "jquery"/ L _) U8 [2 O% @/ E
export function doStuff(){}2 \* V8 v! i8 s' r
module "localModule"{} + @ T+ c( [( _8 f! g$ x6 y( ^- k17 z, n/ `" Z! x/ f2 H
2 * m* j/ c! M( j; H: |3 * l% ~, Q$ Q: K. ]优点 , e6 z/ R) b& v) b @3 l. d& R& L! k * u2 B6 K# d* A9 V5 h: N容易进行静态分析8 A4 N0 V* A: r+ @2 a- b7 o
面向未来的Ecma Script标准 - g, |7 G+ M; a/ Y缺点 $ G9 I4 M x9 |% N3 X4 x. F# }( }/ _( @6 f$ _% X
; v2 v5 f8 P9 V原生浏览器端还没有实现该标准) A$ p# r3 b" {2 w7 |: U7 s
全新的命令,新版的Node JS才支持6 P1 X+ P, `& U# A/ s, R
实现1 f, \' J7 Y0 F# [" G
, g' |; y: e' m! Y' z
5 P0 t- F2 O5 [3 ^+ P
Babel; X4 B* [3 z+ l6 j
大家期望的模块$ d, {$ U* A4 b: a T
系统可以兼容多种模块风格, 尽量可以利用已有的代码, 不仅仅只是JavaScript模块化, 还有CSS、图片、字体等资源也需要模块化。, ~$ ]) B# B9 z, T7 Y. x
T2 u3 w! i$ i7 y. U5 {
! h, W; G7 i2 ]2 C: ~- T6 @% M
10.3、安装Webpack' _- z' l! G) v6 q0 W+ K
WebPack是一款模块加载器兼打包工具, 它能把各种资源, 如JS、JSX、ES 6、SASS、LESS、图片等都作为模块来处理和使用。 $ ]- ~* ?- V( Z2 Y 安装:. S/ }* r" y+ C$ i, w( V
8 c; z. F1 Z/ K
$ R. O) E: t8 S( a/ B% ~
npm install webpack -g o+ X4 V3 ]' ]- s: Z5 I# F- D
npm install webpack-cli -g ! Z! G2 J0 `; `) k! s) p. E1* F: C+ O5 @% c3 P' C5 \4 k
2 8 |% f+ c" P, Q+ N测试安装成功7 ?" Q7 x- j0 r0 _
" q# F0 i9 V* r) z
! {1 r5 O% p" ]4 y
webpack -v' I, f } ^. e) V8 b4 B+ {
webpack-cli -v- [7 k- j: ?( J$ U' I
9 m; Z; T' m. E, g3 e3 K+ }' y( p. K( v8 ~4 [8 x' K6 Z, M
" v+ |; A$ O& r w* Y" j* D5 W {
& J# V9 `# l: U& p8 R8 ^配置 $ K* ~. J5 T6 V6 l+ q创建 webpack.config.js配置文件 ) n* Q% C, K5 v6 p) V& v3 [- G, K3 W - t7 o" M: ]3 U4 [, r- ^ 9 B k; j/ G a. z; fentry:入口文件, 指定Web Pack用哪个文件作为项目的入口 ( L% q9 E. i. a& O; noutput:输出, 指定WebPack把处理完成的文件放置到指定路径7 d) u, [: x) B, z$ ]' |* [% o; |
module:模块, 用于处理各种类型的文件 2 Q# \' n0 }( a+ ]7 F) |plugins:插件, 如:热更新、代码重用等' {' N) w E( b- ~( @2 M
resolve:设置路径指向 1 @9 f( J0 c! Y& W8 Twatch:监听, 用于设置文件改动后直接打包# R& }5 Z9 t% f& L- J3 N7 b
module.exports = { 5 n! k+ g- \1 W- O# J) H entry:"",8 G% O5 {/ G1 e) |
output:{ ) b& O3 d5 F6 e" w* ` path:"",& j2 o5 ^" Y7 B$ V% n0 a
filename:"" 0 A- ~3 o, F! I6 [8 Q% d },! Z9 v# Q; K6 [# r5 x7 s9 J
module:{ 5 D1 p) v, o8 Z; P9 O, ~ loaders:[ / c$ w/ O; L' e! P* R# ~. N) d: I9 z) t {test:/\.js$/,;\loade:""} " Q6 l3 Y* I' m: p3 N% M9 k; D, |/ k' w ] 5 i& f( _" t# w& p& V- O$ s' Z0 z },& r: p- R& }7 _$ j1 J. u% Y3 n
plugins:{}, 9 c |- T2 n1 f4 o resolve:{}, 3 d1 L: P# o6 ~! ^% Y0 u; v watch:true % v- T$ U" X) W! c$ O} 2 k- h3 u, Q4 s4 J1% t" F( S) K0 a1 Y' o! F
21 d: \; a! A7 o5 j' s/ Q' y
3 ?! _# b# v& q* ~
4 ' t* h- f. y" w5 6 H- z, w4 K d# _3 i: U3 @- j# v. c65 x, K1 v+ C# C" W# a9 E# b; ~
7) ]. ^& r5 ^" R% ^8 C- Q
86 u. j/ o4 a# ?' Y
98 K# Y6 K/ K* g' b- E
10 & q) K3 I0 D6 p+ y8 Z. Z11 , {7 ~1 C6 e* k12 $ [0 B; B9 f% l$ \( c4 e13, h4 e/ l9 O$ F8 q0 \
148 f7 u! X& h, p
15% H/ @: u( e! ]
直接运行webpack命令打包 , \8 F3 U$ q# I* t / O" V ~0 U. p+ c# F8 b 9 ]5 q/ a6 _) V3 s9 B7 T/ ]1 ~0 {1 `10.4、使用webpack9 j) t5 ~8 u: a, a
创建项目 * `4 L' e) u: _创建一个名为modules的目录,用于放置JS模块等资源文件 + \2 r) {# W; U% d, o3 d, R在modules下创建模块文件,如hello.js,用于编写JS模块相关代码) H" y% P9 M$ j
//暴露一个方法:sayHi& E! `" k. X" D2 h' ]
exports.sayHi = function(){ 1 [# X+ ~4 z# X( H$ Z& t: U Q document.write("<div>Hello Webpack</div>"); 6 O2 u+ I5 x: U: P% v. p }$ n) }4 R; t+ C: E) M$ i: o- G5 G
1 5 [- p; {/ N% K0 {+ v9 b. M+ Z5 c2 6 M1 S7 x6 \$ |" E1 U* U" r3- r6 l# w& }4 E: |+ n& t& G6 } V7 Z
4 3 p# g0 _+ f& K, R在modules下创建一个名为main.js的入口文件,用于打包时设置entry属性 S1 m& |5 r3 a. N//require 导入一个模块,就可以调用这个模块中的方法了; r) c0 x0 t+ ~+ S
var hello = require("./hello"); % {4 t" l- [# y4 nhello.sayHi();1 ?' {' J* v$ L7 u
18 z& B U% j! M1 c; H
2+ E" M" L( Z# l' M
3. W0 H( A. n |+ Z( L; u
在项目目录下创建webpack.config.js配置文件,使用webpack命令打包 $ Z- `3 a+ J; qmodule.exports = { , \% _: W% [0 A# W' f entry:"./modules/main.js",: s5 x7 r q# S" q& x
output:{ - h% p" Q. o% r) `2 C, A4 u7 B filename:"./js/bundle.js" % r$ _4 k. X' j, b2 T/ d } / @. K# z7 F5 e6 e" Z. |/ L* J& g5 t. ~
. H: F3 x. h" S5 }7 K}9 ]4 V }* S. E2 I8 [& z
1+ l/ B, Z6 y# S
25 o( Y/ @% v# ~0 b* u
3( b6 b3 [5 ]" e# o# }" [
4 0 Z8 u( c- x4 Q) j& l2 K2 C5 y5/ N7 K5 b6 |& I+ q W
6 ! ^* |) G4 N. z# F7 H; |( v6 Y9 k1 d
在项目目录下创建HTML页面,如index.html,导入webpack打包后的JS文件 . [: {/ U' b2 z- S <!doctype html>/ N* }: H7 _$ g/ W& p: b6 T9 V
<html lang="en"> ' } F" d0 r/ f5 `0 M h) O; d <head> X& _2 m6 ~8 H! e7 ]3 I6 x <meta charset="UTF-8"> 3 x( v3 F7 M" ~/ y% e6 h p <title>狂神说Java</title> - c) W) p, [$ T1 P" j </head> & H, E) y' t, }/ H" R! k5 Y <body>8 G4 A" s' U A0 \% Y
<script src="dist/js/bundle.js"></script> 8 @2 |$ n; l6 x, Q7 A </body>) F% D4 \1 C* J4 U8 Q
</html>9 p' H" }$ d7 L, Q$ u
15 s. u- E6 v D3 g6 Q
2 # L/ U) C, @6 w1 n3 _8 @4 h7 Y35 z8 ]( J' V& B1 V
40 \) Q* B3 o" M& v" r" f
5 ; P; {4 N$ o1 l5 A" B! w0 r+ `% E6 1 f; X+ O3 e5 @. w7 P2 N2 m0 H' {82 i. C; s* ^) V k. x2 M0 g! X
9 3 [6 p Q- L* {% }; X P9 O2 V) O10 7 S$ H; S6 X. b# R4 F在IDEA控制台中直接执行webpack;如果失败的话,就使用管理员权限运行即可!% R% Q% A: W( B# q! X, g
运行HTML看效果# E8 v6 v3 P U" F
说明 ! E' S3 k( ~' u% ? 4 s8 B7 i3 w2 P4 M1 p 6 U+ X3 i M- t! @# e# 参数--watch 用于监听变化+ C: |: ~5 [/ g7 Z! s
webpack --watch 8 I5 h* y) Z" f+ c1 B5 j& H! R/ p1! K5 \4 U5 p8 d% W3 Q g0 K
21 D, e6 L9 b6 v
十一、vue-router路由; r: ?$ F2 I! }0 X! y. C" N/ i
11.1、说明 7 K' a1 j8 P) V* R6 Z8 @学习的时候,尽量的打开官方的文档 5 w; L2 I/ P- }8 g, { - H1 |; C1 b+ ?7 U" c2 I- w5 F7 r: q0 x" ~1 x+ G/ A8 C) X
Vue Router是Vue.js官方的路由管理器。它和Vue.js的核心深度集成, 让构建单页面应用变得易如反掌。包含的功能有: 7 r/ P( b1 ]0 p$ |/ F$ Q" f' |0 o* Z% S. u. b5 [" Y
: i( f, }$ ]) {4 }1 N/ }
嵌套的路由/视图表8 X6 d1 e) N. K' @; r
模块化的、基于组件的路由配置 \2 a. a. M4 j8 x$ c
路由参数、查询、通配符 - ]" N" s) n! x2 c4 }& m/ [& Z% Y. l% |基于Vue js过渡系统的视图过渡效果: B% _9 I, w, B$ f, F
细粒度的导航控制 5 o" `5 w/ G8 H8 d2 }5 v' j带有自动激活的CSS class的链接 ?# i% l; V7 d1 O) g5 LHTML5 历史模式或hash模式, 在IE 9中自动降级 $ `! @; [$ G; z! ?) Q9 A自定义的滚动行为 7 }, I2 i/ ?5 E; M11.2、安装6 a3 M& B) Q h" e6 `$ x
基于第一个vue-cli进行测试学习; 先查看node modules中是否存在vue-router! \4 s* f! T3 e4 I/ s
vue-router是一个插件包, 所以我们还是需要用n pm/cn pm来进行安装的。打开命令行工具,进入你的项目目录,输入下面命令。0 e# B) \2 K0 G9 x
6 O5 v. A( v! {3 b% ~
4 q: o$ n+ A& e1 u. T/ [
npm install vue-router --save-dev ' m3 M1 l9 }8 T# n1 r$ ?1 @# v& T0 F4 p0 t" O+ ~如果在一个模块化工程中使用它,必须要通过Vue.use()明确地安装路由功能:$ X! t3 b6 w; q4 y/ l+ }
) _6 Z5 B; p4 h+ a% _ . M% E& l3 A2 ?! |& q: Kimport Vue from 'vue' ' n' Z4 a# K; Q6 ^0 j5 Zimport VueRouter from 'vue-router'3 n( X2 P; n2 {& [" f
) J- O9 v+ m( J, p- `6 r* w
4 P V. V6 H& Z3 x- X5 \$ |
Vue.use(VueRouter);& p1 N- L6 t# j" y
1 , ]% X# x8 V; } N' T, [( ~2$ y& i4 X z( |- l v
3 . |. x; Q+ ^& `4 . h5 D/ y* \' o) O3 |5 T11.3、测试 ) f+ t# j4 K6 i% S. F2 C8 R1、先删除没有用的东西0 a2 v3 ~ t# k% B
2、components 目录下存放我们自己编写的组件 : {5 W1 I/ u: ?( @( N3、定义一个Content.vue 的组件 : y1 W+ B- B* N6 F) D! X( I- Z- c# H G% u1 L$ @' E I
: l5 }* H m& V7 C2 O
<template>+ }# J, L; f% P& h
<div>1 ~: y# J% K5 H; F" G
<h1>内容页</h1>. ^; |7 {% K& K
</div> 2 b, T1 p d9 A</template> + q' X# ^, V( @! @& w" ^5 c. h 4 R! q R7 \; R; a/ i$ d- z w$ R' B! u0 m( W
<script>2 R) Q) k/ V! N) m2 Q/ [4 A
export default {, V3 B% U6 k) Z9 `
name:"Content" " l6 M1 z3 ?: g* s: ]) h } 4 z& l$ @" a' r# v% i</script>; d4 [7 {, K% F4 Y) H8 k4 P; {8 Y
1 ) }0 h( o9 i, l K" R+ D2 0 |9 M l, M6 i Q; S# R! @3: @6 a6 G. }5 u# ]4 ~' U6 s( _" o% |
4 6 a' G7 G$ |- z( @5( A' l" ` F6 M0 K. |, k C
60 D6 T3 [* ^+ W0 B
7 ; R* O# ]3 i6 _( K, v9 j. B8( d5 O! d$ G( y8 e% \
98 o" F: t+ F3 e
10" [$ ^4 M/ i8 m8 l) @- E- Z
11 T' R+ n$ v- @% Q3 K4 V
Main.vue组件, l9 _( R1 j3 Q; c' N
* Z/ Y9 }# Q& M, S7 Z- c
( [/ M, m* s+ n+ T$ K' G
<template>7 M) O: q. ~ q( ]# R
<div>4 h7 ~" P+ K4 {3 ?$ _
<h1>首页</h1> 6 A- P# u( e! L$ F2 t( u </div>( d2 U/ }4 H6 ?% y4 l% \1 }% ]
</template>: d; \, Q$ U; J0 P# c
! V0 w& K( \/ `& d) c; N) T) S( c % a; B+ M/ a" A" Y# q" O: G<script>( `/ g N5 V( |) N7 @
export default {$ g7 a, ~2 L: I# K( n4 @
name:"Main" * V Y: }0 z: V4 x7 y4 C( H( z }0 [! B. e B2 E* C' ?
</script># w/ i1 e& Z4 d
1 4 D; x- y0 b" P* _1 C/ v/ V2% T7 _, h. @: l2 h5 ~ i' M1 K- t
3 ( g8 {7 @9 X1 f* r T3 ~/ t48 {' c. j; M a3 [: y4 g
5 2 m, s' _4 Y2 R* n* W3 X R6, B9 d5 _2 u: w4 o3 @3 N
7 # ?% d# G( a' X1 M5 D/ l8 2 g! M0 a0 s" p- ^3 X- w, \9 / `1 l" F+ v4 ^% `9 h; d4 F10# H( {; i0 @$ h
113 Y' `% a% c" R3 j
4、安装路由,在src目录下,新建一个文件夹:router,专门存放路由,配置路由index.js,如下 - W, {7 B `7 M8 M s6 W. P ( c0 b6 L9 `3 b1 u % M, F+ [1 H: y- J# o6 Bimport Vue from'vue' * {2 s) T/ x; u* m7 S//导入路由插件9 O/ I4 ~7 S$ d5 o5 o
import Router from 'vue-router' - Q/ ?1 A1 h' J2 w//导入上面定义的组件- d0 S F' d6 V' E* O5 W
import Content from '../components/Content' 8 K7 o& Q6 W$ J$ u+ z) L2 Bimport Main from '../components/Main' # h5 c9 t1 ]/ O4 L& n//安装路由& T% a- m6 w" e7 c
Vue.use(Router) ; + W# c R" B1 d4 X4 R, O F0 L# @3 W) n//配置路由 * { B: Y2 x, Z# p# R4 fexport default new Router({4 R% c( F" ~* E# V) [
routes:[ 1 ] X, N$ A" I9 x1 a9 n$ N { ( B6 [$ _3 s! X7 z2 w9 Y( W- ]8 K //路由路径' j( C6 P) f! M1 G7 }' c' ~
path:'/content',* Z% @/ U; b1 ?/ ]: o
//路由名称0 c/ r+ q8 {4 r7 |1 h
name:'content', $ b& ~8 C- i* z( Q% l* X //跳转到组件& u$ \9 c v; ^5 p4 a
component:Content+ g* O8 y( H M! a4 ~- C; M
},{ : p, J4 k: J0 Q //路由路径" T' S+ E. h3 w0 S* _) }/ X+ u
path:'/main',: N- |. y* [5 F1 i3 f
//路由名称 + E2 R" q6 l: K% J, C& Y- u- E name:'main',4 f( g% y) g+ Z4 y0 }- K, @; E4 D
//跳转到组件 , }# X* N/ ]2 C* b/ b, G3 `% C component:Main , _5 K% p7 x G } & F3 g" e9 ^- u; p0 I( ]4 B3 A0 ] ]9 F @2 r" D8 z/ d
}); ; C x. [. h2 {1 4 v' j( a0 W" _/ G7 c6 D2: M; i) s( j8 y& r8 k: A6 N5 A
3 ' j' x0 e" _8 Z8 g% Q$ Q4. ]( R5 q( L3 d
5+ L! [9 ^. @* [0 M5 e+ r3 e
6 9 p0 F& E# E0 B) `, ~6 a) ^6 Z1 e7 - @1 q$ j' n" Q. x" |8 , k3 ~( W s7 A6 h9 ) V* Z9 M# S0 X8 [10/ D. r1 X0 E: _$ T2 Y( ^/ A
11" B- [3 a" \; {
12 8 I5 u+ r% I5 ~. x13) q: `' f% P! u6 [3 O% x
14 7 B9 p' k) j# R% {( J! }5 ~0 }15 ; R( _7 _( I2 f; X5 _( S3 f" U# J16 ) ]8 A, F9 R/ e3 X17+ l4 g1 V- n+ O0 k
18 ], E9 i1 w6 t' x0 o( `
19 0 o' U$ y" _" M20 6 h6 |( k- A5 ]8 s7 Q3 c$ U21 4 n( }; c* k1 D+ D% u+ V4 m22. [9 t, \/ A: A" {8 [" s7 V% @
23, J' A* [0 O+ \0 E$ f
24 - c7 A/ z( ?2 d) O7 |5 M25 - Z( V8 {% M8 e1 j26- P4 P7 l; k: X5 W* R* j; F8 R
27 & R5 ^' P, z( A) k; R3 p4 ~28( g0 |4 ?0 i9 ?% N* n
5、在main.js中配置路由& C: H3 D& g+ \/ m/ k
, O' m, j2 r1 z Z# c: |; A5 H . j) N$ [) |' X+ ?8 ~* l% vimport Vue from 'vue' {$ c* G. a0 P9 Y2 v! |8 b1 d1 c
import App from './App'3 I* W8 h: I! K8 Q# m/ m1 T" [
7 H( R5 [4 j* x5 M! ^% K6 ]. ]
z' n; O4 X6 z: T+ i//导入上面创建的路由配置目录 , i5 ?8 |' k& O+ q& oimport router from './router'//自动扫描里面的路由配置 * U1 {, h, [5 h, d7 @6 {- y9 K- }2 E) V9 {5 u' @/ B6 h
1 e; q6 `8 @. J9 j: N `
//来关闭生产模式下给出的提示0 i0 h/ p( G: k" A0 p2 N
Vue.config.productionTip = false; , A/ j6 l* b3 \3 u3 h 6 W' Y$ W( f/ H( `# ] 1 O# _* Z; s2 Knew Vue({ . r- H- ^2 K3 q# }$ m( n el:"#app", % _( q/ ]2 G( T9 G. }0 {+ ? ^ //配置路由' c5 n! w/ H; q2 K1 V
router,& d9 V3 D1 i3 v9 |
components:{App},5 G+ m4 Y7 C2 U! w' w
template:'<App/>' # @* Q0 I& h8 M+ x& a, X});; z. \, e) z# b) q3 T; `
1$ E, r# f& C! \) d0 b/ f3 Y
2! `6 Y& F) D! s K
3! v9 h+ b5 J; O) L9 ]$ b/ r
4 % f L: n( `4 i0 L) {7 G k5 + k$ e# j7 T4 Q; R4 C: E \+ D/ X. r6 7 K$ v! `# j# ?9 m71 g# T7 g) [- v0 e ]- |
8 : u) j! g9 ^1 n) m7 h3 ^3 k9/ ?+ i. ~. s1 W0 E2 a
10 1 C1 c- K6 N' q' r" ^! U11 : Q+ ]% F) }: F6 P8 x& b. ^12 $ X0 B9 ]( G7 V8 K8 o4 b, d13 : l `+ y* \* u3 V, R7 w6 X+ y14 7 Q0 j# D* M( z! ?: T9 T, F- E15 & P2 U& q( {( p16( Y+ q% G0 h x, o( _
6、在App.vue中使用路由 ! [1 F" L" E5 v& _9 J: s 9 e% M! a( ~5 M7 M1 A4 a6 y; U* N# @ , D) I) G% j! A" D D. E<template> * C v, J. { f) F9 q <div id="app">; y, U5 z" }( k) v. P0 ]
<!--* b. a( [+ \+ h y' S* R
router-link:默认会被渲染成一个<a>标签,to属性为指定链接 5 H2 {/ w6 ?+ f& s router-view:用于渲染路由匹配到的组件 & g# d& ]6 D, ~8 ? -->4 R) H* t' m% C5 k2 b
<router-link to="/">首页</router-link> 3 g5 j t4 V: E <router-link to="/content">内容</router-link>% y, j% {" l& y, R" h2 Y
<router-view></router-view>6 f1 c4 E, e: C& z) O
</div>! L+ Q0 \7 \0 P. H9 p$ f J
</template> 9 `4 F C+ Y2 [4 D4 O4 x$ V4 K$ Q- C% ~8 D _( u1 b! z. p$ _* W
2 N; d& \- v6 S5 V& U/ E
<script> . C+ ?& H" _* n8 K9 w export default{" F7 a* o2 [& S2 e7 ?
name:'App'% a8 _ k/ ^0 t
}9 k9 [; ^* f1 ^- X3 X8 F' y, L3 b
</script> : m% f8 C$ u5 A7 G7 Y<style></style> # x& I4 Y% ]2 r1 " i Z( m- {5 w$ E# q$ {" {9 G2& x) W7 ?0 \4 s
3 2 W9 I4 m$ H( J% e+ J4 . R- i- |) r2 S5 e9 r. o5 7 V$ _! i: X; _& S" q- j6: S4 M3 p6 c2 @
7 , o8 d: L; v2 y9 A8 . I( U9 h3 Y: X9+ v: l/ S* H3 W' R' V
109 v, ?) g: {2 d* e* Y
11 3 u3 ^# c& ]7 }: ?+ a/ O( v( h12 9 l/ @) I7 H' g3 ~7 i13 % z4 ?( q& Q( R% m& b: m& b144 n& H$ J( \7 y' s4 y- U
15 1 ^+ X: C( y+ t, |5 C. |1 t16( N; d2 w+ C. i
17 , b' L; s4 K2 ~1 F185 o \' v% D M6 C! b1 f( L1 A& u
十二、实战快速上手 # S( |5 r! X8 l; K4 O我们采用实战教学模式并结合ElementUI组件库,将所需知识点应用到实际中,以最快速度带领大家掌握Vue的使用;% w* s8 b" k; Z6 v
5 `8 H1 @3 ~7 F. U4 |3 d. X0 _
2 N7 q8 L! A$ y3 J( y. t( R12.1、创建工程 " m, q0 y2 B: K: r0 `注意:命令行都要使用管理员模式运行 2 x! a% a2 T9 q9 C& g' f1、创建一个名为hello-vue的工程vue init webpack hello-vue * }+ J' P# i' Z1 B+ `: d2、安装依赖, 我们需要安装vue-router、element-ui、sass-loader和node-sass四个插件( `2 X" k& H7 X O: @5 b
# J' ?5 ^: e p9 V
7 S" S# R0 X2 z4 k# z) R#进入工程目录 6 m8 {& l* r$ r- l gcd hello-vue8 X5 F$ l5 @; N# w6 @3 E+ D
#安装vue-routern R& g8 n7 l% B. i: q2 f
npm install vue-router --save-dev * m& F' K- X' k& D. t8 f#安装element-ui : n9 J5 n8 |6 p" _npm i element-ui -S % u2 d, ~+ R) D1 l#安装依赖0 [) h" `7 P6 n! B( |: k
npm install6 M: Q% y) I) I r
# 安装SASS加载器- o7 d) Z/ b% G' S+ }- K
cnpm install sass-loader node-sass --save-dev 3 O, S1 Y# m: q9 \0 W5 ~" S#启功测试; Q' J g9 W2 J I$ U
npm run dev* {* D8 f, Z# s7 w+ F( F ]
18 K1 c& f! M# l3 F( X7 n
2 % R! ^% `+ ~& O# s- G4 S) @3 9 Y. A0 n# h, s47 Q& G6 ^9 C! L2 N+ H5 C
5 5 B8 @; D1 z5 [, [1 G* h7 z6 : u- M. h" |1 ]+ [5 S+ r1 \$ }7 + j# }! R) e1 g1 I( r) n8 B, b, g- D; L" s p9 8 O/ o' [: A0 ]: \! ^( I2 q) G7 o105 ]9 L, T! ~' `8 R. p
11- s( P! T' o$ F. p( [* B G+ D
12+ v/ _5 U. ?: E0 a6 r p* ?
3、Npm命令解释: ' d1 q( `+ B" e6 |3 V$ B 9 l. N j8 N9 N% w; n 0 i n* |% o7 M* znpm install moduleName:安装模块到项目目录下 ; h( z) W) {) A8 J. V2 bnpm install -g moduleName:-g的意思是将模块安装到全局,具体安装到磁盘哪个位置要看npm config prefix的位置 + T5 [% j s7 C4 v+ w- h3 E6 F; enpm install -save moduleName:–save的意思是将模块安装到项目目录下, 并在package文件的dependencies节点写入依赖,-S为该命令的缩写( Y0 N; N4 d- B/ {& C8 k
npm install -save-dev moduleName:–save-dev的意思是将模块安装到项目目录下,并在package文件的devDependencies节点写入依赖,-D为该命令的缩写' p# K0 a- l7 t K6 M# r
12.2、创建登录页面 3 k5 h. R) @) o3 {4 ?/ ~) Z把没有用的初始化东西删掉! : s3 `4 T8 Z( |6 F p, M 在源码目录中创建如下结构: 1 D0 V; z% V' L& O1 U5 L; w4 r3 l# L# W8 {& [2 k0 C
+ Y w5 \8 p( b1 u! h' W
assets:用于存放资源文件& O$ T* h9 ^& F; l+ X3 I
components:用于存放Vue功能组件 - F7 F/ R# x2 mviews:用于存放Vue视图组件; H* }1 g1 D6 E* L0 q; S
router:用于存放vue-router配置" S; H( o! A* r; u% t1 G! V
: ]! Y; ~* y# e7 ^, y
9 v7 W# i5 d; K; u( H* Y% g. X9 y' \9 [
- u* g" k3 F/ G创建首页视图,在views目录下创建一个名为Main.vue的视图组件: 1 j" ]+ @8 \! p, B6 B' R3 v2 X$ O$ `6 r
0 Z1 {# ]+ L1 |<template> ! X- e9 {. z; F6 O <div>首页</div>% y# o9 P4 Y/ y% G! w
</template>0 w* ]! @$ ?# C5 }8 o
<script> # W6 O; l8 r% r7 T8 z export default {/ {! F3 M0 A/ ^( ~* _; W
name:"Main"* I3 W E6 u% G
}% Y, j8 \/ i, F' J8 J0 n2 |
</script>$ d" @8 A. ]% E4 I' Q* D- E5 N
<style scoped> / R+ x" x0 U& f% n1 G1 M. W</style> $ k" H, V' N* ~1 ) z. x' j( p y+ B# ~- S8 r; K2 $ c0 Q9 }' s6 K: O6 n2 a9 q3 6 A5 k1 d) _, [7 j# W! v4+ T0 C( W8 J( P( K. L, ] }2 H
5 8 f8 \2 U0 Q' A0 H, J6 / q! c2 N, O: U L7' f# ]! q8 p4 k2 t* x
8 1 }; s8 N8 N/ v$ U9 ) V. l- m7 m: J% s& r10! i; I; S# V Y+ g/ }. ?
创建登录页视图在views目录下创建名为Login.vue的视图组件,其中el-*的元素为ElementUI组件;8 |: T# S( _! {
, D6 ~( W& d/ F: N) C# Y " b J P) @' [<template>! p/ o6 ^/ a5 Q
<div> 0 K9 m0 D% ]" e- v3 b% Z3 v3 F' D <el-form ref="loginForm" :model="form" :rules="rules" label-width="80px" class="login-box">! ?! o9 M8 c( [8 v* v1 N9 w
<h3 class="login-title">欢迎登录</h3> 2 w5 M$ }7 |, ]2 f <el-form-item label="账号" prop="username"> 1 K$ ?: }' \. K- W5 H5 w <el-input type="text" placeholder="请输入账号" v-model="form.username"/> 1 T4 z5 K X6 g9 M6 A </el-form-item>7 t' O5 r6 ]% A
<el-form-item label="密码" prop="password"> ; t( V% S( M) i <el-input type="password" placeholder="请输入密码" v-model="form.password"/>" u: O7 b: A- ?" H; b( Q0 v
</el-form-item>( {% d* K0 S& O' O4 `4 ^& M* j
<el-form-item> + I& _( W4 Q: L8 F7 M a w* u <el-button type="primary" v-on:click="onsubmit('loginForm')">登录</el-button> & i% G( {2 K6 j </el-form-item> - O8 Z8 C- T) i4 V( L9 e1 P' H </el-form> + ~; r4 c+ M. W. T4 b) ?! N2 q; ~ 2 t" E. {, \+ m8 ? 8 v: q# ?9 [- [( @1 X1 I r, v <el-dialog title="温馨提示" :visible.sync="dialogVisiable" width="30%" :before-close="handleClose">3 O8 K8 }& R# M N" N
<span>请输入账号和密码</span>, d" Q( J9 _/ X# Y- `! K. D2 `
<span slot="footer" class="dialog-footer"> 8 j, H: p/ \' A1 v- T <el-button type="primary" @click="dialogVisible = false">确定</el-button>1 J8 x: s- G$ I+ b* p) x1 Q
</span> * h$ |4 O- f7 ?! l0 g9 @ </el-dialog>2 X6 u; F* ^6 O6 U; a. o
</div> ' x5 c( t/ U, o0 j) ^</template> . [$ ]% u6 f% d9 u3 K1 H" ^3 @0 J$ \$ O" [
' G6 d# C% ]& d: S9 G) F
<script> Z a3 Y7 U2 f! f export default { , H! F' N5 G: p: M. l5 i name: "Login", ; ]0 q$ H, I9 U8 S# R) S3 X data(){5 ^ y1 [+ q- l0 W
return{ W# R2 U: w! V( U' v
form:{ " d, f& {- c S% Y* H- s4 | username:'', + E$ p2 |- `# V- ^ password:''5 a! f; z8 N3 S" Z; g T* {
},& L( h6 }) q K
//表单验证,需要在 el-form-item 元素中增加prop属性 ( V$ d% w" e( _, z' k rules:{ 1 V+ R4 t5 p4 k+ v" \( j. t username:[" q# w; ~- }6 \/ ?
{required:true,message:"账号不可为空",trigger:"blur"} & ?0 x( P7 b( Z/ N/ v- x$ K; b ],- @/ q' k* f# f9 E, r2 s
password:[ 1 ]) Z: B6 H. ?/ G: S: R" u, P( h {required:true,message:"密码不可为空",tigger:"blur"}# k3 |( [. o( ]4 A6 L$ l
] . ?8 |, \0 T7 ^ },& E- p$ r# M' S9 U& H( e5 t2 a
2 F( [7 ] z7 \- z8 S* u1 d! T
j$ c9 V8 S$ A( B' |1 r% x1 R
//对话框显示和隐藏 9 l0 R m5 u. r9 P dialogVisible:false' T) y# B2 C. Q# P4 j
} # {6 {2 v& W% d }, 8 X3 C- U x ^+ v: W+ h methods:{ , Z+ ?5 c0 O% D6 q5 R# U; }/ l; a onSubmit(formName){; ?3 e% B- y" Z$ I4 h; Y
//为表单绑定验证功能 - H+ i( @5 P4 }- r" Q this.$refs[formName].validate((valid)=>{ ) Q$ |) y; l: D6 N& b' Q& ] if(valid){3 i; j7 R3 E- X) ^
//使用vue-router路由到指定界面,该方式称为编程式导航 ' E' ^. O2 X* n# @7 P# ]$ N/ V this.$router.push('/main');4 V% L& q) v* y& _; k& B
}else{ : L1 O9 z6 n/ F5 B# V9 E2 P this.dialogVisible=true; 6 @3 R# Q0 M) b/ V$ Y return false;% M9 D$ w/ _5 {0 F) x2 E
} 1 m* A& L* N! C' Q+ ] }); $ ]4 T* g. \& b; Y* c2 \ }4 @) l% F( a ^- o5 z5 @2 B% H1 g
} / ]- J3 f" `. w1 U4 A- b2 U7 f8 n }% i8 t) E5 w4 ~
</script>9 u- \, G% _ m
2 o& [; t# ~3 u- b; ?. d
$ l) ~; I, U) y
<style lang="scss" scoped> + R) A. [3 a. }# t. `5 v4 b7 s .login-box{ 9 Z7 `& `( S6 I- l7 f border:1px solid #DCDFE6;0 W' ?2 E2 t) U" L6 A9 O
width: 350px;3 j4 M: q7 q( W* L, ^: u. n
margin:180px auto; " S, y8 R5 F: G# ? padding: 35px 35px 15px 35px;$ p; p1 k" I7 p
border-radius: 5px;/ b) K* P( J7 `$ K- c
-webkit-border-radius: 5px; ' H5 @! q: c; L$ o" O -moz-border-radius: 5px;" i) G" r: @9 e+ M7 K( D+ m7 c: u) [
box-shadow: 0 0 25px #909399;* o: J7 v* l; K8 }5 E# q
}8 L% _" m" T9 h8 N' }/ B
.login-title{6 ~1 D G* w: D& \) {; x1 R; j6 _
text-align:center;9 [2 V) d7 q) j/ [5 d
margin: 0 auto 40px auto; # p( m2 `, @, T- c/ D1 |' S- r color: #303133; $ S+ M: V' U e9 E. z# C: s9 G } ~" E. z% L3 _9 Q2 f</style>4 L9 g4 ?$ w$ B9 g7 ?
1 5 O' b5 _# O' q; I8 Z; ^4 Z/ N29 {0 T" ]$ G d4 I
3 2 P+ a, t/ c. C$ J+ m: t. d4 ' Z& _6 W1 V5 S( P9 y5/ v% C% T6 h: T3 T5 B9 @# w- U" z( J0 ?
66 D/ |' J, r, i$ J0 ?
7 : C& e! P" ~% e88 a% |) s, K5 Q$ K$ \
9% K; C2 W4 [6 D4 V
100 U: R7 B8 s) M& x$ H- v5 O
11 ( _# T* x) z3 F( d6 o12- ?6 h" s! s. {5 |7 T) C" K
13 5 x5 ~8 v1 d! g7 f1 u; @14 6 }4 K+ v+ d) T+ ?# p15/ E( F, g9 ^: O, a. B, ^ R
16 ! |$ q" ]" t) \7 B9 L8 g17 ) Y( V0 W) d! Y1 y$ |8 ~18 7 K. \9 G! q: F+ d+ Z9 v199 x% k1 Z0 `! M5 N
20. I+ ^) g! l8 K" v8 [6 H/ ]
219 N) H$ H+ i t9 G# b7 M
22 7 {5 E; K, P% S, l+ Q23 # p. n2 e* w! b- @- [2 d243 i# G" q8 U x' x: v$ l2 c
25 + [$ _7 Y0 A) ?0 v26 ) k) P$ i5 u* O5 s273 S6 `& `0 \, H8 p+ s
28 ) k7 Q, w1 V. X+ r' s' [0 k29 - m3 x; u }2 g0 I2 t7 X% [307 h6 [. d# a/ g: V& n5 S
314 \2 Y8 q0 V( j# G
32) V/ I7 J0 k# R; o b d O' k$ G
332 _/ V* w: A6 G' Y5 W; D, y
34 ; w1 g7 J6 k4 t8 z% M35 $ q2 d. [# ?9 K M4 U! q/ X, ~36 " ~2 b9 j+ z w37 $ w' a( Z4 w3 D3 L# l38: I, U* \5 u% F( j W& t. \% y
39 ) Q. v0 l4 Z6 e' Y40 ! y7 S0 ~! E8 B( ^3 q416 Y& n9 i& T S2 G% O0 |) P
422 W# `9 L9 k1 n
436 a7 Y3 B+ c( h( Y, r- Z8 p# H+ X
44' H5 _! l" P) H, b7 r7 f$ S
45 ( C/ ~$ X1 t" ?7 {46 % d9 A. s8 l; M, K; F9 ~* D/ B477 h8 Y5 T4 C. H' N% w
48 " K; B1 F9 @, Y) J* b49' ?* [6 p7 J8 y/ t. A4 u
50 % r, ]; ?0 w( Z/ f# I( I51& U0 ?: H8 G/ L! @+ Z7 i% \3 C0 s
522 m- Q+ e" [0 {& X/ _
53 , j3 {- x6 m* M4 ?4 Z, U# v54 6 s& P1 {" M( P5 B# c' C55 , i+ s) a- C' x4 z' I3 P' j56" F C" b6 ]2 c/ @2 [6 x) Z
57 3 u) | X6 ^4 X58 , v& c! i5 T' l0 ]3 S+ P4 l591 S3 B" |, [6 T s
60 ' u1 E1 l. @) g$ E* k+ g61 / u- X/ G2 N; z0 m62 & D0 \+ l; A# u9 D63 ' E( |8 A* c# o; H$ H9 c; h64# b2 r1 Z$ S% C# r' W& H
657 J' g4 @/ e$ ?
667 l- {# j' v' L7 y: _
67/ B0 a4 K7 y4 S; N$ k
68 # H9 C! Q4 K2 O9 Q5 W69 ! H( h7 J) V; e- f70 4 V( L7 G' B7 b& F+ Z71 . ^& D8 F( _4 f6 ?72 2 r: w8 [# q; m4 m' q! z73$ ]1 j8 g: u$ f
74( H. z& v+ X' h
75 ! G. M; n* |; I76 " i8 x2 ^ k$ T. }, d77( Q( p/ @( B) B l/ ]
78 * g' C- l% G# b3 R* V! J79 4 s; l9 h' f* h, d' u800 o" | N& ?' z, Z# R0 r: l
81 5 v" i2 W+ p4 |5 \( V; ^8 E" x创建路由,在router目录下创建一个名为index.js的vue-router路由配置文件 4 d5 z2 R! \/ L* F8 O/ x6 E+ i6 T( q# Q! |# I H
7 M% u2 V9 m/ C3 W0 }//导入vue8 |' B1 N! d/ J" O: o7 @' o
import Vue from 'vue'; 9 J1 f. f; X9 vimport VueRouter from 'vue-router'; 9 E7 a0 f! m6 D: l) g1 d& \; |//导入组件) U9 c5 E& C" K& c$ k7 W- A( e
import Main from "../views/Main";+ ?5 R/ L8 \* |/ h: ^
import Login from "../views/Login"; 7 g* R4 y1 I1 P: y. E2 q2 t//使用/ |6 M: f, ]( J! R) D1 f
Vue.use(VueRouter); ( o' ^9 I2 r0 d4 w( r# i//导出 6 @* `/ e! P- u- f; c3 z! Uexport default new VueRouter({ / ^( Y8 U3 N9 J/ n, B+ I routes: [4 {# Y5 V! H! k! u" M0 ^% m; `
{ x, ]3 q3 n/ x7 S //登录页 5 L) F2 t% \( w- I s3 W path: '/main', l, Z& |5 P x* H! y
component: Main # t- h7 }3 l) `3 S }, , S/ r# A% Q& }- Y* o5 n/ L //首页 C: c& m8 l4 P1 `/ x2 h
{ : G8 @6 j7 i4 _8 L8 w ^( K path: '/login', # {/ I$ d4 y5 c4 v, e6 A component: Login1 t. f* J/ `1 n0 X
}, 4 @( k, R* T9 o$ K5 s9 m+ j0 f ] ' \4 p7 m0 W6 E2 G& g# u6 c) X/ f. x+ x. f6 q5 \" d. t+ Q+ G7 y
4 Z4 n( Q# ~( F}) 5 o; g/ Z0 C$ M! j4 N. s. J0 m2 }$ @5 |3 `* h
/ c( d5 z4 l" P) J1 7 m+ W8 v4 j& p( |* q/ ?2 4 }+ g6 V9 E' W/ K6 c3% t" ~( D1 R5 N7 X! z2 O
4 $ j* e6 r& ~' E9 |+ h- f5 1 e% Y. q- g( k5 A Q67 B# ^, E& v4 B1 X5 D
7# i9 i3 L% c' |
87 G' f- L0 z& j
9 8 x+ W+ W; [) E. E10% l. k9 n- D E' ?9 b, D
11 ( K8 {. U1 ~% H% E12- m0 b$ }* c# U {! C" x
13 $ b9 S2 d+ v& w9 \( C2 ^* s3 D8 A149 ?1 Y3 R; ?& M: }( D
15 ' w, T7 D0 B# e5 Y! N16 2 o8 Z( I+ F" e1 D3 E' C17' b l+ Q* P+ |' r, ` Y7 L
182 \7 t4 i5 ]/ w8 w; U/ N/ p% }
193 z2 |) a7 Z2 H1 [+ u. k
20 3 P9 c1 {1 W. T; ` s& e. A21 5 A' |0 S/ }+ W- Z9 ]* u221 W* g0 S/ A) b
23; P: K# d2 K# R
24) \ f4 H/ j/ I* e& g8 z+ X
25 * s) a/ C* R. `" w AAPP.vue e. H7 q. H- `6 n, d6 P Z+ f1 ]5 X( x . c3 I; f5 }: ~% D, V- |! y B6 G" O; B
<template> 9 R! w4 T( p: U$ v, k <div id="app">. d6 Y" J/ O2 I3 e& O/ P5 R& r
<router-view></router-view> * K" u7 ^+ p8 P </div>7 H" ^: x; A# V+ O
</template>7 z; Z" I* Z1 X# n$ Q
& i1 {( |; ^( Z1 k# C
& ~- E8 a# L+ G: X" Y
<script>7 F& a% ~3 K- z% a1 L" R3 Q
/ T- h, W5 t: \/ c
9 n. {8 Z- @; F. j8 p( l$ H8 @/ m
3 F- y0 X3 F ^# W" |. S
$ v3 e3 P2 Q% D* Z8 Q
export default { # ^% f/ _' V' `6 L! a' S name: 'App',% L3 N% P0 f1 Q5 X
3 r8 b( c3 s; D
9 ~/ F: i( L3 o
} 0 R: s% T- t4 [' n</script>4 j) n! `: D# ~3 n) C7 k
2 z1 r4 \! `( H% Z6 n9 v5 S
6 N+ {1 C" v! c1 y& r$ E
<style> / L/ f% s# |1 T% @( p& ]#app {3 @ R# f4 t. {1 Z
font-family: 'Avenir', Helvetica, Arial, sans-serif; + E; c1 u# K$ I6 F; t -webkit-font-smoothing: antialiased; 8 ~+ R% p X( t( I4 J4 b7 l -moz-osx-font-smoothing: grayscale; $ D1 U# l# P% P3 K text-align: center; / O+ }2 v6 D9 d# X. c color: #2c3e50;$ b- H m1 _5 V9 b
margin-top: 60px;1 U3 p6 c0 y/ C
}9 ]: N5 F$ C, _* {
</style>) \$ M: B' {# _( h0 M1 f5 a
1. r- b& c: o& e6 T! L) c8 r
23 C& o, s+ S2 ?4 j
38 `! L% H7 _! W; z, y5 {
4 U& U* e& Z; C$ v4 K0 _55 Q. d. ] C3 {+ f
6 & e& G; ^& e- i: L4 I1 T8 c, a7 7 {" k# F2 s( O$ Z3 F" z8 2 ?7 R, J( m) }5 [7 {5 }1 A3 s) z& x9 + S" ^$ v4 e) @* t1 t/ `4 A10 & S3 O& @% x' K. B( Y( ]1 h! S11% A. _% Z; ^$ n9 O# p2 `- v. w
12( X a, a a: d7 D( i6 w6 l
13 : i y5 D- b5 o$ y* C: ~# |14 # o& c4 F# X6 {9 _15 ; K2 |* R8 i. \# E* o8 l" }16 ; C* d; X- i/ n2 X7 d9 y% E; C# o17 3 q6 r3 A+ K5 w, x18& `) a7 P( i4 O5 w
19 : \( A! c4 h- ~- X* v! D/ N20 + @1 k, A, y' B. p' R21 + E) Z4 Z- o' n22. G+ e6 R6 g9 i5 s
23& c% B9 {1 L9 ?% Q g/ W
24 . O$ y: |$ H1 D1 Y( W$ ~25 ' i6 b$ I$ ^3 e5 M3 x3 ^& [" xmain.js2 h0 \5 n* u' x* M4 l7 [5 s- D
) V: C) H/ v0 [( F/ [- M2 t
& A- S1 G2 R7 {# C& M// The Vue build version to load with the `import` command& {" z) F% l3 k3 e; o2 X2 `
// (runtime-only or standalone) has been set in webpack.base.conf with an alias. 9 x2 t( G& D/ j/ j/ d F- Q1 L) Vimport Vue from 'vue' 5 O9 n! q+ ?; }: V! p$ rimport App from './App' W" ~' G5 o" G( E- s
import router from "./router"! p. S8 Y" t4 X+ S. m6 Y$ ]
" u% F! ^5 R" H. H. y* i" B1 u+ ] * m* f7 L: N9 l ^3 b. jimport ElementUI from 'element-ui'/ H- S) F: J# T5 `" X+ s5 K1 ^
import 'element-ui/lib/theme-chalk/index.css'+ r# S# N% I. K! ~4 ~
3 O$ B& n) m" j, j G
' S& B# B% B( L8 y: C* iVue.use(router) & w+ I% h& p( p3 G3 E, C# uVue.use(ElementUI)1 z6 {1 y! [2 m$ m
1 b' W4 v! u8 D
$ H& Z% j \' t+ d: O2 W* G/* eslint-disable no-new */% R7 b* u3 {+ d: @: f
new Vue({! ]& I# n7 ]' x) b: E4 w. M
el: '#app', $ ^3 _8 T7 Y9 H( {2 P0 K9 A router, : @' L/ f' k& X! ~5 \1 y$ P render:h=>h(App)0 @* N& a, ]% @
})$ s* j8 c4 j' m; H6 o5 R$ r- R
12 C; l8 F" K0 R# ?- s
2- @ P9 o. W: J4 S0 O
3 9 S5 ]4 \+ s' `0 k: A6 q2 m0 @4 " g5 H0 b. X" v/ p5 6 l2 K+ W F9 Y) [( _7 p6 y# I; M' G/ ?4 x/ x
7 % S* Z# b b$ e* ~8) s5 G: F) A, m
9 ! h; u: d; b. R1 X1 C10 / b7 e2 b9 i) T& T11 / P" b$ Q+ Y# ~% c& m+ o/ a# x, d12 , V; Q% g9 H. P6 ^1 R- @13 ! S. l6 s! H* m& C" y# ?6 G14 . d( P9 m+ F% R+ i6 g/ B. }159 x* r/ U+ C) J
160 c2 Q2 \) C; k5 i" p
17 4 |/ Q" b1 A1 C, m18 6 p$ o, t% h+ k测试:在浏览器打开 http://localhost:8080/#/login' q- f7 i2 a, e, ^$ q2 |1 ?3 t
如果出现错误: 可能是因为sass-loader的版本过高导致的编译错误,当前最高版本是8.0.2,需要退回到7.3.1 ;$ k* {; s- b! b' k7 x
去package.json文件里面的 "sass-loader"的版本更换成7.3.1,然后重新cnpm install就可以了;/ `! n0 N4 F5 z- E1 C: D0 Y+ k# B& N
! r$ E' e \: c& g
- i" B0 |$ g& A$ b6 ]! F$ a6 a12.3、路由嵌套 $ |7 ]' W, R9 x. v# P( B ]$ G; G嵌套路由又称子路由,在实际应用中,通常由多层嵌套的组件组合而成。 / h' C' s k0 V7 P* `. ^9 T( G8 qdemo9 P7 ?* p* `) K) D* n
1、 创建用户信息组件,在 views/user 目录下创建一个名为 Profile.vue 的视图组件; ; b. r- N# I6 k) z# V F- L5 y4 cProfile.vue: e7 }0 J- y; z4 j$ \& k! s/ T; d; G
* c; V+ m# |& F, m. ?6 M
# x2 I2 H. C8 O, g6 u/ Y
<template># y. r& V( [: u" L" W+ M+ { d! ^! C
<h1>个人信息</h1>5 [5 j& o/ \/ q) N! |4 ^' v3 T
</template>- |" G1 s2 x' u6 G/ I7 \. k4 c
<script>3 F J; S9 M* I; [
export default { ' I4 h/ R4 \5 b u, }1 p; A4 @0 X name: "UserProfile" / _ n& r" t8 x8 |2 j+ X } , n9 K# y% d1 p6 s: r- V9 o</script>" [% @' P2 H N4 o) v
<style scoped> + p! U$ T' y# P" _</style> : U. M) T( ~4 K! h1* U0 T9 N9 F* H$ P J" h: y
2! s8 H" I9 t' o+ B
39 ]5 v. O( `- L) g, J; }" u- [
4 4 U, n5 m! R: M; |9 V' C5 M w5! d8 ^4 v) V" n! g! e* w# e% q
6 3 u* J0 M3 T% l1 c q, u3 X7( a/ W. }4 s; F0 V0 _
8' c& S; f4 k5 O/ O7 R4 T6 r
9 8 q# A# b x) w% j! {10( K G- A* p# P: X
2、在用户列表组件在 views/user 目录下创建一个名为 List.vue 的视图组件; & P( Z' l. I5 W g* T4 m/ |List.vue : N4 ?" Q5 e! @, Y1 I$ `9 S& u. q2 L' y- s) F) J
2 |0 D' [1 D+ _2 |<template>" z! z6 m0 b9 Y. d! m
<h1>用户列表</h1>' G+ E7 ~: v0 S9 \0 z- X
</template> % O0 q( v. O. {9 f8 j! Z; s6 M<script>0 i6 {- c: h" I6 q9 V. N
export default {7 G9 E, \0 M3 V3 P/ a
name: "UserList" 6 F, g7 E' ?% u9 i* e8 k9 e, ~ } ' _+ A' P. M" F</script>8 ?. m$ ?! E$ p" w
<style scoped> + V+ G( R/ t$ K' a0 o</style> * f3 n* ^/ L9 e2 C% n7 Q) S1( `; `$ [1 I' m+ w, |3 k
2+ Q U8 q e2 B2 K: [% W' S
3+ }1 ]( a- p: { C' W$ b G% s8 ^9 l
4 2 a) s6 }- {/ |% H5 - i& r# _( O# X. u1 n' H9 w7 X66 j% l! v* w* t( X$ N" b! C
7 - R: D. L* I) U5 C8 + f! J. n2 b3 x2 T# Q- |9# p7 C9 g0 o# R$ D2 {" h, s
102 \; F7 m* m4 G
3、 修改首页视图,我们修改 Main.vue 视图组件,此处使用了 ElementUI 布局容器组件,代码如下: * M' `& |2 A! g; [Main.vue. _. Y5 r! @, K4 D
0 P! }" g1 f& g 5 {1 r1 l5 X: e1 b) ]) Q- P<template> ) g6 G5 X4 f! p. x) B! g' M' j <div>8 S9 U! |9 h& g* [' o4 u4 ^1 G
<el-container>& d5 O* T9 L+ \( t0 ?) E3 g
<el-aside width="200px"> 4 F0 `% B. x) h) e1 ?8 ^2 ^ <el-menu :default-openeds="['1']"> , X7 f1 O# Z# L: B$ ~' { <el-submenu index="1">( W4 D& _( S) H
<template slot="title"><i class="el-icon-caret-right"></i>用户管理</template> 3 U5 C. I' v+ t <el-menu-item-group>/ t& f4 M. o0 W0 b" N4 }* p3 ~# x
<el-menu-item index="1-1">: ^6 e1 {9 a7 f1 [$ K
<!--插入的地方--> ' y ~1 v: R2 _2 @: J <router-link to="/user/profile">个人信息</router-link> % ^/ N' x6 ^* U </el-menu-item> 9 g& A* H' y: R+ P* K1 E- _- }# v <el-menu-item index="1-2"> & m& _. W6 M6 u( C" B( I8 v$ B4 Y <!--插入的地方-->( y8 L; l+ v. c# P& g @
<router-link to="/user/list">用户列表</router-link>0 g( _: a* U6 o' b" g+ M# L7 S- s2 _
</el-menu-item>! u' ^- k1 Z2 a
</el-menu-item-group> ) J- x' y- J! z2 @# y: [ </el-submenu>" P( }; q. r, j" T! a
<el-submenu index="2">! @5 s) B7 j) w- x- s2 p+ _) F. g
<template slot="title"><i class="el-icon-caret-right"></i>内容管理</template> & ^- ]3 X. z0 [; _0 V <el-menu-item-group> / n; v: q5 B. O8 @ <el-menu-item index="2-1">分类管理</el-menu-item> % P0 E) ~5 N* ]! Y* J% T4 O+ X <el-menu-item index="2-2">内容列表</el-menu-item>( p5 e/ U. e2 m
</el-menu-item-group>4 a! j1 C: z) S+ d2 S
</el-submenu>8 d" V1 p; Y- n! e( M
</el-menu> * u7 G, X/ ?' K7 A </el-aside>8 \) {7 E8 W) ^+ v7 d
7 a' X4 [9 t" y7 O, E3 c- ~3 a# H! n, x* [
<el-container>' y Y( j9 o$ ]
<el-header style="text-align: right; font-size: 12px">: f& `0 m8 T. y& S0 K
<el-dropdown> ; X% ^& s1 E' H4 T5 x3 F <i class="el-icon-setting" style="margin-right: 15px"></i> n6 y6 h4 l. u2 U; _
<el-dropdown-menu slot="dropdown"> 7 R3 v, b1 N4 g; ]1 ?8 D! D$ {# I <el-dropdown-item>个人信息</el-dropdown-item>& \* k( V! H5 s$ x) _+ N" Q4 [
<el-dropdown-item>退出登录</el-dropdown-item>/ R2 V% I1 S; r
</el-dropdown-menu> o; W) I( Y1 a4 _" S/ E* N) E </el-dropdown>% F. E6 v* ^3 K' }
</el-header>0 P0 q0 f, d. i) q
<el-main> ( {# T% b) t6 V" U, I <!--在这里展示视图-->5 ]1 W& I6 B0 k! F+ g' e
<router-view />" J! `+ g! k: ]9 D! q/ n
</el-main>0 C( ]7 O- A5 Y+ l( \: G: d
</el-container> ! p9 _# ^0 g. M$ @ </el-container>+ ^) b) b8 i& J" J+ j
</div># n9 B+ h' g' w) e
</template>+ R( I \; f6 A, {) v& h
<script> ( S' N1 _" a* j; t' l4 V export default { / G9 C! a; t- c' \$ e/ q$ O name: "Main", u2 l1 t: H7 e3 {5 M; g. H' [& l0 v- s
}0 G7 `- h+ R) e: I
</script># S+ i% {- B! q7 U; Y W" C
<style scoped lang="scss"> S% F, p: @& I5 n& m .el-header {* O5 e& e" _4 m" C0 c- S
background-color: #B3C0D1;+ K* {& k7 ~; p3 q
color: #333;7 h' v' W" r' u
line-height: 60px; $ @' M9 R2 C1 {3 {/ Q! u3 x6 j } / h. L4 ^6 I3 r1 K .el-aside {8 S$ g. Y4 v8 T% F! X
color: #333;. `3 ^5 U( V q1 R5 Y# d* e
}' g5 E3 C, E/ {( |- p' f
</style>2 Y5 r% R: {. U. f/ f4 Z/ ]
1 2 t+ y4 g0 h7 h; {" C27 d6 O8 b3 _6 r$ J) i6 v- J0 L
33 n* I* z- y# b! e
4 7 m# G% N( k6 q4 f# U5( C) X4 O/ o4 S$ a. V- v. ]9 m
6 , M$ H6 @$ v% y m4 D7 * x* Z6 T" M7 n! P8 V, A8 + w( ] T" _& G/ H9' m8 D4 H1 B# C' g U
10 . O, ` w4 @! s4 }) ]11% d! i; }4 j; M
12 ( b2 ~) T7 X& f2 z3 c9 n0 k0 K13& [7 E- M7 W" x& i
141 `2 I7 e( c; y/ X
15 9 s) X- D# W! ? m7 A0 h16 * k: }9 f* f% W) n17 , ?$ }- t' T" l$ I3 U$ ?) n18 ! K& Z$ E, h3 s2 O& h* U( f4 j: g$ B19 & A$ ]% @# _* E5 A7 L20 " a9 X6 {- |2 M215 T+ I7 B3 L5 A# B
22$ i/ N' Z m! b) x* w/ F1 d6 o
23 % y6 R/ P$ Z* a7 _4 m24: ?6 d! j3 O7 R& |% B" R
25 6 G3 o u* W) j26 8 D0 J0 `: U: y. F0 D27 5 v! V* g( M+ t& [: x$ U28( G$ R8 S9 f5 A. [
29 2 ]- _7 }# C% G3 m30. T2 O- s( P7 Q) V& Z7 U2 P
31. G8 I0 B! [5 j' g
323 O6 }1 j# s/ |4 z: k3 d1 |3 ]
33 3 ?& \( Y! ^* @1 }9 }. ]34* D c7 `& c# A# y6 j- o. M0 N
35/ I# _. w( W1 n8 J# a f! f
36 3 h4 w" J u& G37. G+ X% `7 U% w7 {9 \$ J
38 & `% G4 n6 S5 w8 ]! E39 ) Q! p9 \2 D5 a/ z, O40: d7 o# C- H/ N2 i) Y& M
41 ; R1 k# I* ?1 s! \42 `7 W6 B. @: h) }" h& G43' Z4 a; f! y4 ~
445 ]2 W0 j% J4 n3 Z
45 9 K$ C {8 f' T/ s4 c46 q K, d% L3 g' C- }- R% J4 u) S
475 V( q) U0 }1 G9 \
48 3 n* K6 k3 X' Q8 }/ }+ ?* \4 M: c49 - ?% V1 f& {- f+ G" g50' U; [! d8 j2 a: e* T+ [/ i1 g
51 # {9 Q K1 q/ Z52 " o. _! ~( a# v; {3 X7 u4 `4 V" r53 ) Q7 N7 x' G# |8 N$ {$ e54 % p2 E# Q; B$ w9 Y* X0 x6 m55 8 U/ x9 K6 p/ H% @56! A( J, ^8 y2 d- ?1 T0 x" A
575 A% \% Y; k: c' m) R
58$ V$ x1 A& S# }8 J
59" V# v" ?, n- V9 L
606 a$ \0 U8 m+ U/ h
61% J3 }- `2 R# R
4、 配置嵌套路由修改 router 目录下的 index.js 路由配置文件,使用children放入main中写入子模块,代码如下; A, \( n% M, `
index.js / x4 G1 x: {& U3 F0 p9 _6 b4 x7 I( E2 N n
+ m4 M1 Z; r+ k% ~//导入vue 2 L; @. {1 w/ simport Vue from 'vue'; / H' G: X) W Q& n" i Rimport VueRouter from 'vue-router'; 5 T. v0 ]6 ~- c3 C3 A* r- c//导入组件" O: b3 a, j! ?* f# V* b
import Main from "../views/Main"; 8 }! m V" v% p8 K% Oimport Login from "../views/Login"; ) |" G% t0 V+ h6 Q% a% ]//导入子模块 - p6 i8 ]2 B9 t Q* V0 B& k4 x kimport UserList from "../views/user/List"; + p1 \. L# {0 \import UserProfile from "../views/user/Profile";1 C- y( |. e4 C( c6 L5 c
3 p5 U! j$ ^/ v9 c+ ?( x# }+ c
3 Z! c) F* D! o. L& {! ?//使用 " s- q2 d" i, W5 f. VVue.use(VueRouter);- `0 @$ ?+ B8 y. A- P; T* d
//导出! H7 m) K& T; d. w& a
export default new VueRouter({ ) c0 p; f1 c, f1 l( h& V! _" S- O routes: [ 8 f: B/ G& u; ~$ E { ; I3 B5 `: i! d& V N$ K0 \ //登录页* e( Z$ n2 @) `/ f
path: '/main',1 t8 Q; a+ |0 z% P; \( I
component: Main, 7 {1 N+ \8 n6 v5 {- t( |( ? // 写入子模块 " O& ^6 B n4 T4 e9 q children: [% H/ l% j! |; F; B- J# T
{ ; c( l4 ]8 {( y3 q9 D path: '/user/profile',; m! q `6 J1 q- b( ^
component: UserProfile, 3 a0 [% S8 F2 b }, {' t4 ?+ T( }5 _( Y& q, z
path: '/user/list', $ R. E. i* G) m& ~ M component: UserList,! q3 a9 g2 C+ ^' I# I$ e& H' O
},, T6 X) C, G! f1 L1 p+ j4 R
]# a& `$ x0 x$ x4 g1 I. ?& U
}, % Y3 k& ^9 j/ y4 L //首页$ m1 I0 [, }7 f7 w
{7 |% t$ R+ v' f" v7 y4 W; M& e' n
path: '/login', ( t6 h& a. S/ f; e0 k! M component: Login0 Q* D& d- Q/ q* y; F
, {5 u4 D# z0 { B- k& j B+ R
: Z* z. U5 H7 V4 ]; n3 ?+ l
}, ( r& i/ G, c9 \7 J8 D ]9 @% s6 C, L/ I; P3 P ?" _
}) # [% L8 v/ l- n1 }+ o1 ( E7 I2 k) E5 W3 N1 |) n, }22 s! ?' N8 z- D, Z9 M
32 k" k" s, M% {# ?9 T3 ]
4% b2 u- R( a! s/ A& E+ C/ i1 x
5- e' Z' w. Y7 i. _
6 $ S( w9 p* I7 D* @% ^7; y. j4 n* v! k; n
8/ P7 e* I# k: I! ^/ W' X
9 8 `, t+ a5 N" m5 v10 * k5 X: v. l T& L1 I11# D$ _' ]% d+ C; a/ u7 E
12+ z4 Q# u" r g. F2 a) Q
13 / @ U* M1 d" P9 P) x146 b9 U! T. `+ q6 L- F
158 H, @) p( w" H1 C; L X! e
16 " n& I1 {' t# p. p! X! c17 , @5 m* ?$ _. i+ r( ~9 g! i18 7 {5 [4 W- Y& r* u8 Y* p- N19: G& A; u0 y _: l5 g* y) p3 K
20 ( y/ \- g/ v- _, u/ N) Y; T21 / Y+ ` h# D1 Q) f/ t2 O# a; A22* }1 d: u, I6 ]9 t( U7 }
23. q1 ]' i& W o. V
24 1 p- w% ]3 R2 c6 o25 ; s! g+ Q6 D+ w/ C7 I3 r26* k0 |" |3 d$ s6 v) g* U
27- \- N1 y6 i/ E' X! g2 s3 O
28 $ O$ ^! Z" D) V29& w2 X0 q5 v7 _
30& U+ P' p$ f- [) d3 s0 x( S
315 p/ ^1 X% f7 {: E
321 X& q. f3 r5 o0 j6 P
33 0 w9 E' N' C9 e: B34$ [ @2 D7 V, @5 s
35: K) {0 `( Z2 ^4 J
36. H) L8 e, s9 X5 i4 t
373 T8 `$ f$ V) h( G5 X4 G T$ `; N
38. F, A& m, g& X
5、 路由嵌套实战效果图 $ t3 Z6 Y; a( a! C$ g5 m0 y D+ o; h& d, B, o
" e# r# t! y, o# `7 J, E
5 F4 J9 N$ A4 y$ y
0 ~% f' l7 L5 m g- z, p! m图 路由嵌套效果图 0 R* f. c" G( a$ d( L; R- H4 S/ y. F& Q( d, `
1 {1 c+ k! R& m; L" Z2 E12.4、参数传递) j" N% f0 y Z% z% j
这里演示如果请求带有参数该怎么传递7 e& ^) p' B/ O. b* V% j* B
demo9 F3 J5 _* _4 Q8 g( \
用的还是上述例子的代码 修改一些代码 这里不放重复的代码了. j6 ^, f; m/ {: o2 i% `- H
第一种取值方式 ' ?; w. z. r& I* w/ a1、 修改路由配置, 主要是router下的index.js中的 path 属性中增加了 :id 这样的占位符+ e* G8 R: b( [6 I4 {+ {
R* W7 R G6 r. G& ^' H8 r* p8 b( e
6 z& W! u" U0 n: N
{ $ Z2 }- C; t, D! Q* G2 d2 { path: '/user/profile/:id', % T1 T3 {, J: ?2 n name:'UserProfile', & V$ @5 w/ l% x7 W9 ^7 i8 R/ ` component: UserProfile 3 G" P5 R% R6 h2 L} ; M4 f$ K6 }- q) ^+ m" s1 8 j; b3 ?9 G9 ]( \/ ^2/ U V. }" w9 G" S a8 X
35 ^. J1 S( w9 n9 [! j
41 [# u8 B4 y; _: N- p+ @% p, F
58 O/ Y3 N6 f) a
2、传递参数 ! A5 Z8 S& t6 Y, T( J- a, Z 此时我们在Main.vue中的route-link位置处 to 改为了 :to,是为了将这一属性当成对象使用,注意 router-link 中的 name 属性名称 一定要和 路由中的 name 属性名称 匹配,因为这样 Vue 才能找到对应的路由路径; & t! Y, Q% f5 t; F" n P6 ^4 o3 U9 D2 k! H" _( }( l; o1 X. p
. s# p9 L+ z' j. H5 _+ E<!--name是组件的名字 params是传的参数 如果要传参数的话就需要用v:bind:来绑定--> ( K; s8 o' B" [+ O$ x% `<router-link :to="{name:'UserProfile',params:{id:1}}">个人信息</router-link> - m$ {5 k$ }' _2 Q1 B1& c* I y: L5 \0 E( _# u
2 / v- H9 d1 _, M2 G3、在要展示的组件Profile.vue中接收参数 使用 {{$route.params.id}}来接收" Y& y! \0 n5 K& Q7 }7 W
Profile.vue 部分代码; q( X4 [0 l! p6 x3 m9 [, |
8 m. W& Q/ v2 X; e7 q
6 p% ]: a9 G+ h2 \3 ~1 r
<template>8 |; F0 j' o5 g
<!-- 所有的元素必须在根节点下--> $ b# e5 Z, r8 i, _! U* S. C <div> + j* D$ v- n( \ <h1>个人信息</h1> D. n* B! J) F5 I
{{$route.params.id}}* f$ z' z7 R* x b& M$ K' X
</div>! n! f& ^! t/ n* `
</template>6 p+ Z- R# I5 B+ ^% }
1( @) ]$ B# |2 ]) e. [5 V
2 * H" M6 ]+ `3 ~0 u! B$ W3 W! d' s& k3 + Y2 Z' k9 f9 |- D& m! S4 G2 l5 `8 d0 i- v" f& L5$ p3 s) A( f/ b, l/ N
6/ O4 F& k% t' \; e7 Q9 A' D
7+ u+ v1 V0 W) ~$ g
第二种取值方式 使用props 减少耦合/ q: z- ^% @& N/ G ~
1、修改路由配置 , 主要在router下的index.js中的路由属性中增加了 props: true 属性 9 o! i$ R( ?1 A x) j$ b" M' ?2 U$ _2 Q$ ~
& K* ]' y! X- P5 c{ 3 D: V/ ]$ E' ?0 @5 H path: '/user/profile/:id', 5 S$ M# Q8 ]) W2 U$ j" U! j
name:'UserProfile', 3 }1 T Q& m3 d% i, g0 E
component: UserProfile, 6 s8 x4 {% F- _8 b
props: true Q* Q0 e. Y1 Z ?$ o: I ?# I1 N}, d% |, E ?6 P4 h# b3 M
1% m6 W l) X! f( O4 `
24 C8 z& r, o! J
3 " ~8 x7 E9 i8 h48 e/ ?9 g" |1 Q" q' W; Y3 j
5 ! F5 r4 f9 M& T! L& J' q+ u: [0 d6 \' }$ i9 d$ K( l# n5 ?. |; d
2、传递参数和之前一样 在Main.vue中修改route-link地址 ' r3 D* G9 B( d* K* B# _% y- n" V3 [1 C6 w8 l
" @8 J" _1 D* w; h5 l<!--name是组件的名字 params是传的参数 如果要传参数的话就需要用v:bind:来绑定--> ) `- F4 c2 N/ M- F. U( o1 T8 Y<router-link :to="{name:'UserProfile',params:{id:1}}">个人信息</router-link>3 E* G' c% C9 J4 S0 O2 n' }3 x' K
15 I+ L6 |2 Y- ~
2* n" l5 |/ h! v& b H b
3、在Profile.vue接收参数为目标组件增加 props 属性7 n/ {* ?8 @! @7 k. t m
Profile.vue# L! l: W2 B8 x% |3 `- G% e
: a3 I E2 i# A7 N2 L