vue 脚手架

1 创建项目

  • 如果是创建vue脚手架项目,请参考该博客:https://www.cnblogs.com/ming1025/p/9887247.html

    配置脚手架

    修改Eslint

  • 创建完成后,引入elementUI 到脚手架,则需要进入项目文件夹,执行命令npm i element-ui -S,该命令加载elementUI 组件。

    加载elementUI 组件
    2) 查看配置文件package.json,是否有element-u组件的版本号。在node_modules中也可以查看,所有安装的源文件可以在这里面找到。
    加载组件后新增部分
    3) 修改main.js
    在main.js文件中添加引用。

import ElementUI from 'element-ui'

import 'element-ui/lib/theme-chalk/index.css'

Vue.use(ElementUI)
main.js文件修改

4)此时即可使用elementUI。

  • npm run dev :运行vue
    npm run build:打包vue程序
****如果本地调试项目时,建议将build 里的assetsPublicPath的路径前缀修改为 ' ./ '(开始是 ' / '),因为打包之后,外部引入 js 和 css 文件时,如果路径以 ' / ' 开头,在本地是无法找到对应文件的(服务器上没问题)。所以如果需要在本地打开打包后的文件,就得修改文件路径。

2 脚手架结构详解

src文件夹

src文件夹

【1】assets
作用:存放静态文件,里面包含一个如js,css,图片之类。
【2】components
作用:存放组件
helloword示例

(a)、一个.vue文件由什么组成:template(模板)、js(script)、style(样式)

(b)、template:一个模板里面只能有一个父节点,比如在脚手架默认helloword.vue里的class为hello的父节点div,他没有其他的兄弟节点。

(c)、script:vue通常使用es6来写这部分,然后使用export default导出,他里面可以写比如data,mounted,methods等等。
其中,data一定要用return来返回。

(d)、style:跟我们写样式表一样,都是使用<style></style>来包裹,不过,他这里是默认影响全局的,也就是说回影响到包含他的所有页面。
这里的使用的是局部的,语法是<style scoped></style>,scoped的意思就是只作用于当前页面,不影响其他页面。

【3】router 路由
路由在router目录下的index.js
1、引入部分

说明

2、使用路由依赖
路由依赖

3、配置路由
配置路由

【4】App.vue
app.vue

主要说明<router-view/>,此处是用来展示路由页面内容,如果要跳转的话就使用<router-link to='xxx'></router-link>
【5】main.js
main.js

3 路由

index.js
假如单独安装的话需要安装下vue-router:命令为:npm install vue-router --save-dev【实际中,根据提示报错的提示信息运行出现的命令即可。npm install vue-router】

index.js

从此处发现,只要把写好的vue组件引用到此处即可。解释下path是何物?就是在访问地址中看到的#后面那个斜杠
path

4 初步理解数据流程

1、声明组件,也就是需要写的部分,在components中创建.vue页面,每一个.vue都是一个组件,整个页面就是不同的组件之间的组合。【功能模块化】
2、然后注册路由,在router中的文件中,注册路由,个人理解就是中转,实现组件页面和另外页面的一个交流通道,路由提供[道路名称,路径,同时在此处引用vue环境即路由组件环境]。可以简单理解:为各种功能指明特定名称和路径,并搭配好环境。各种环境好比是高速路,各种页面路由属性好比是高速路的各个岔路口标识。
3、最后,在页面中通过路由引用2中路由属性,从而实现页面内容显示。

1、router-link
  <router-link to='./home'></router-link>
  vue 内置标签, 在渲染时渲染成a标签,在点击的情况,路由中的页面在<router-view>标签中渲染
  to属性可以跳转页面,后面跟随的是相应路由中的path属性,指引到需要的组件相对位置。
  tag="button" 属性可以渲染成想要的原生标签
2、router-view
  <router-view></router-view>写在组件想要渲染的地方,等组件跳转过来就渲染。
  可以理解为声明了一个区域,专门用来显示跳过来的组件显示的位置。

5 路由

传参

  • name传递
    在接受的页面 <p>我是router-name:{{$route.name}}</p>即可传递,一般不这么传,
  • to 传递
    利用router-link中的to传递。
语法:
    <router-link v-bind:to="{name:'xxx',params:{key:value}}"></router-link>
解释:
    a、首先:to需要绑定
    b、传参使用类似于对象的形式
    c、name就是我们在配置路由时候取的名字
    d、参数也是采用对象的形式

例子:
a、在App.vue中将to里的路径修改成上面那样

<router-link :to="{name:'hellovue',params:{username:'tomcat'}}">hellovue页面</router-link>

这里我们注意to的写法,前面加了冒号,因为那是绑定的,传一个username过去,值为tomcat。

b、在index.js里面给hellovue配置名字叫hellovue,与上面name相对应。
例子图片

c、在hellovue.vue中接收参数
<p>传递的名字是:{{$route.params.username}}</p>

  • url 传值
    在路由文件中采用冒号的形式传参,就是对参数的绑定。

  • 动态路由匹配

const User = {
  template: '<div>User</div>'
}

const router = new VueRouter({
  routes: [
    // 动态路径参数 以冒号开头
    { path: '/user/:id', component: User }
  ]
})

一个“路径参数”使用冒号:标记。当标记到一个路由时,参数值会被设置到this.route.params,可以在每个组件中使用。于是可以更新组件,输出当前用户id。也可以在一个路由中设置多段“路径参数”,对应的值都会设置到route.params中,例如:

多段路径参数
除了 route.params 外,route 对象还提供了其它有用的信息,例如,route.query (如果 URL 中有查询参数)、route.hash 等等。

响应路由参数的变化

  1. 当使用路由参数时,两个路由都渲染同一个组件时,原来的组件实例会被复用,这样比销毁再创建显得更高效,但是,这也意味着组件的生命周期勾子不会被再次调用。
    2)复用组件时,假如要对参数的变化做出响应的话,可以watch(监测变化)$route对象。
const User = {
  template: '...',
  watch: {
    $route(to, from) {
      // 对路由变化作出响应...
    }
  }
}

或者使用导航守卫 beforeRouteUpdate
捕获所有路由或404 Not found路由
常规参数只会匹配被/分隔的url,如果想要匹配任意路径,可以使用通配符(*);

{
  // 会匹配所有路径
  path: '*'
}
{
  // 会匹配以 `/user-` 开头的任意路径
  path: '/user-*'
}

当使用通配符路由时,需要确保路由的顺序是正确的,也就是说含有通配符的路由应该放在最后。路由{path:'*'}通常用户客户端404错误。
当使用一个通配符时,$router.params内会自动添加一个名为pathMatch参数。包含了URL通过通配符被匹配的部分。

// 给出一个路由 { path: '/user-*' }
this.$router.push('/user-admin')
this.$route.params.pathMatch // 'admin'
// 给出一个路由 { path: '*' }
this.$router.push('/non-existing')
this.$route.params.pathMatch // '/non-existing'

高级匹配模式
vue-router 使用 path-to-regexp 作为路径匹配引擎,所以支持很多高级的匹配模式,例如:可选的动态路径参数、匹配零个或多个、一个或多个,甚至是自定义正则匹配。查看它的文档学习高阶的路径匹配,还有这个例子 展示 vue-router 怎么使用这类匹配。
匹配优先级
有时候,同一个路径可以匹配多个路由,此时,匹配的优先级就按照路由的定义顺序:**谁先定义的,谁的优先级就最高。

嵌套路由
实际中,很多应用页面是多层嵌套组件完成,同样的,url中各段动态路径也按照某种结构对应嵌套的各层组件,如下:

/user/foo/profile                     /user/foo/posts
+------------------+                  +-----------------+
| User             |                  | User            |
| +--------------+ |                  | +-------------+ |
| | Profile      | |  +------------>  | | Posts       | |
| |              | |                  | |             | |
| +--------------+ |                  | +-------------+ |
+------------------+                  +-----------------+

借助vue-router,使用嵌套路由配置,就可以很简单的表达这种关系。

实例:
const router = new VueRouter({
  routes: [
         // 此处的路径会被当作根路径,所以嵌套的组件中不许要写嵌套的路径。
    { path: '/user/:id', component: User,
      children: [
        {
          // 当 /user/:id/profile 匹配成功,
          // UserProfile 会被渲染在 User 的 <router-view> 中
          path: 'profile',
          component: UserProfile
        },
        {
          // 当 /user/:id/posts 匹配成功
          // UserPosts 会被渲染在 User 的 <router-view> 中
          path: 'posts',
          component: UserPosts
        }
      ]
    }
  ]
})
  • 要注意,以/开头的话嵌套路径会被当作根路径。可以让人充分的使用嵌套组件而无需设置嵌套的路径。 *
    children配置就是像routes配置一样的路由配置数组,所以可以嵌套多层路由。
    此时,基于上面的配置,当想访问/user/foo时,User的出口是不会渲染任何东西,这是因为没有匹配到合适的子路由。如果想要渲染什么,可以提供一个空的子路由:
const router = new VueRouter({
  routes: [
    {
      path: '/user/:id', component: User,
      children: [
        // 当 /user/:id 匹配成功,
        // UserHome 会被渲染在 User 的 <router-view> 中
        { path: '', component: UserHome },

        // ...其他子路由
      ]
    }
  ]
})

编程式的导航

  • 除了使用<router-link>创建a标签定义导航链接,还可以借助router的实例方法,通过编写代码来实现。
    router.push(location, onComplete?, onAbort?)
    注意:在vue实例内部,可以通过$router访问路由实例。因此可以调用this.$router.push
  • 想要导航到不同的url,则使用router.push方法,这个方法会向history栈添加一个新的记录,所以,当用户点击浏览器后腿按钮时,则回到之前的URL。
  • 当点击<router-link>时,这个方法会在内部调用,所以说,点击<router-link >
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355