Vue磨刀嚯嚯

Vue开发风格——传统方法应用vue.js

传统方法引用vue.js.png

Vue开发风格——单个组件式

独立组件式.png

组件

基本操作

  • 创建一个组件构造器
  • 注册组件,并制定组件引用在Html中的标签
  • 将组件放到Vue实例挂载的Html元素中


    组件使用的步骤

知识点

  • 局部组件与全局组件
  • props传参;单向传参;双向传参;一次性传参
    • //myName是单向传参, myAge是双向传参,mySex是一次性传参 <my-component v-bind:my-name="name" v-bind:my-age.sync="age" v-bind:my-sex.once="man"></my-component>
      props传参
  • 内容分发,slot作为原始内容的插槽。(混合父组件的内容与子组件自己的模板)
    • 默认:父组件模板的内容在父组件作用域内编译,子组件模板的内容在子组件作用域内编译;有了内容分发,子组件之间插入父组件的DOM。
    • 指定name名称的slot;组件中使用slot,以下图为例,不需要每次都指定3个slot。


      指定name的slot
  • 父子组件互相访问
    • 父组件中,通过this.$children(包含所有子组件的实例的数组) 或 $refs.索引ID 访问子组件。

      $refs.cc1.msg

    • 子组件中访问父组件this.$parent

    • 子组件访问根组件$root

    • 组件树中通信

      • $on()监听事件
      • $emit()在它上面触发事件
      • $dispatch()派发事件,事件沿着父链冒泡
      • $broadcast()广播事件,事件向下传到给所有的后代

Vue.js组件的API 由三部分组成: prop, slot事件

  • prop允许外部环境传数据给组件
  • slot允许外部环境插入内容到组件的视图结构内
  • 事件:on/emit/dispatch/broadcast允许组件触发外部环境的action

过滤器

  • {{}}差值的末尾添加一个管道符|
  • 过滤器也可以串联或者接受参数
    • {{message | filterA | filterB }}
    • {{message |filterA('arg1', 'arg2') }} 后边的arg1传给了过滤器的第二个参数 过滤器第一个参数是数据本身

语法糖

  • v-bind 缩写为 :
  • v-on 缩写为@

vue-router

基础步骤

  1. 引入依赖(HTML):<script src="js/vue.js"></script><script src="js/vue-router.js"></script>
  2. 创建组件Home和About(JS)
    var Home = Vue.extend({ template:'', data:function(){}});
    var About = Vue.extend({template:'',data:function(){}});
  3. 创建Router (JS)
    //调用构造器VueRouter,创建一个路由器实例
    var router = new VueRouter();
  4. 映射路由(JS)
    router.map({ '/home':{component:Home}, //路由的key + 表示该条路由映射的组件 'about':{component:About} })
  5. v-link指令跳转到指定路径(HTML
    <a v-link="{path:'/home'}">Home</a>
    <a v-link="{path:'/about'}">About</a>
  6. <router-view></router-view>HTML) 放在需要渲染相应组件的地方
  7. 启动路由(JS)
    var App = Vue.extend({});
    router.start(App,'#app');

原理
vue-router ————> v-link指令的路由映射 ————>由路由映射找到匹配的组件————>渲染到<router-view>标签处

嵌套路由

  • /home/newshome/message/home的子路由
  • NewsMessage组件并不是Home的子组件

具名路径

  • 路由映射部分router.map,对应的路由name='路由名'
  • v-link={path:'/home'} 变为 v-link={name:'路由名'}

v-link方便用户在vue-router应用的不同路径之间跳转;执行时调用router.go
v-link自动设置<a>的href属性

路由对象

vue-router应用中,路由对象被注入每个组件中。
赋值 this.$route

路由对象的属性

  • {{$route.path}}当前路径绝对路径
  • {{$route.params}}当前路由请求的参数
  • {{$route.query}}路由参数查询
  • {{$route.router}} 路由器
  • {{$route.matched}}
  • {{$route.name}} 当前路径的名字,具名路径name

activeClass 让链接显示选中

  • 通过v-link指令设定<a v-link = "{path:'/home' , activeClass:'active'}"></a>
  • 钩子函数<li :class="currentPath == '/home/news' ? 'active': ''"><a v-link="{ path: '/home/news'}">News</a></li>

每个组件一个route选项,route选项有一系列钩子函数
切换路由时执行这些钩子函数
钩子函数包括:data钩子函数,用于加载和设置组件

钩子函数

  • 全局钩子函数:定义在全局的路由对象中
    • beforeEach 路由切换开始时调用
    • afterEach 每次路由切换,成功进入激活阶段时被调用
  • 组件钩子函数:定义在组件的route选项中
    • data 设置组件的data (afterEach期执行
    • activate 激活组件(afterEach期执行
    • deactivate 禁用组件 (beforeEach期执行
    • canActivate 组件是否可以被激活(beforeEach期执行
    • canDeactivate是否可被禁用(beforeEach期执行
    • canReuse 是否可被重用(beforeEach期执行
  • 路由切换, 钩子的参数为transition对象
    • transiton.to 将要切换到的路径的路由对象
    • transition.from 当前路径的路由对象
    • transition.next() 调用此函数处理切换过程的下一步
    • transition.abort([reason]) 调用此函数终止或拒绝此次奇幻
    • transition.redirect(path)取消当前切换并重定向到另一个路由

路由阶段

  • 检查视图结构是否具有可重用组件?检查canReuse可重用阶段
  • 检查当前组件是否能够停用及新组件是否可以激活?canDeactivatecanActivate验证阶段
  • 所有钩子都被调用并没有终止切换,切换就合法。deactivate activate data激活阶段

this.$router.go(-1)
this.$router.push('/目标路由')

Vuex

组件之内变量的作用域独立,Vuex可以管理数据在组件中的规范交互

Vuex的特点

  • 单一状态树数据管理模式: .state是应用层全局data对象
  • 单向数据管理模式:事件驱动
  • 单入口管理模式: 提交mutation来更改store的状态
  • 生命周期 :应用不退出,不刷新,Vuex一直保持

Vuex语法

  • store.state
  • getter : 全局computed
  • mutation : 类似事件,包含事件名和该事件触发后的回调函数;修改state的事件(同步)
  • action :提交mutation的代码(异步)
const store = new Vuex.Store({
  state:{ count:1},
  mutation:{
      increment(state){ state.count ++; }       //事件 + 事件回调函数处理逻辑
  }
})
//执行
store.commit(' increment ');

Webpack

  • 模块打包工具:将静态资源压缩在指定的文件中
  • 资源暴露给模块,commonJS 规范 module.exports = function(){}
  • webpack {入口文件} {打包生成文件} 执行打包
  • 配置webpack.config.jswebpack便等同于执行打包语句
  • 配置package.json ,配置npm start执行打包语句
    webpack配置简化打包流程
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,884评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,212评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,351评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,412评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,438评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,127评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,714评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,636评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,173评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,264评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,402评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,073评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,763评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,253评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,382评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,749评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,403评论 2 358

推荐阅读更多精彩内容