Vue磨刀嚯嚯

作者: 小淘气_嘻 | 来源:发表于2018-07-03 19:27 被阅读0次

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配置简化打包流程

相关文章

  • Vue磨刀嚯嚯

    Vue开发风格——传统方法应用vue.js Vue开发风格——单个组件式 组件 基本操作 创建一个组件构造器 注册...

  • 嚯嚯嚯

    因为离得太久,再次提笔都是满心欢喜,哪怕静下来10分钟也是够的

  • 嚯嚯嚯

    千万人体育ii哦看看哭唧唧好vv吃醋VB你奶奶家几句话vv 规律把那你呢

  • 嚯嚯嚯

    我想要做一个大大方方的人不会因为一点小事就困扰也不会因为喜欢一个人就想的很多其实做一个拿得起放得下的人很好啊人生总...

  • 嚯嚯嚯

  • 嚯嚯嚯

    继家里墙,地 被我嚯嚯完 现在我盯上了不用的旧椅子 哈哈 我老爸老妈在楼下, 我一个熊孩子画的两眼发光 一阵哈哈哈...

  • 【诗歌】午夜凝香

    一 今夜的月亮像一块磨刀石就这样嚯嚯嚯嚯风睡不着玉泉路也睡不着 二 这就进入节日了已经走了那个人的节日也是我的节日...

  • 嚯嚯嚯,精油化学

    最近一直在岁月静好的时光里,浪着。同时在深化自己学的芳疗知识。不免在亲近人那做点人体实验。 昨晚睡前给兔子灌了一杯...

  • 《海贼王》,内心燃不尽的火焰

    哟嚯嚯……哟嚯嚯嚯……哟嚯嚯……哟嚯嚯嚯…… 听着布鲁克清唱版《宾客斯的美酒》,一个快30岁的孕期妇女,眼眶竟然发...

  • 那声音让我睡不着觉

    “嚯、嚯、嚯、嘶”...“嚯、嚯、嚯、嘶”. 我被断断续续的“嚯嚯嚯嘶”声音烦扰。我自香甜的睡梦中转醒,睡意很浓。...

网友评论

    本文标题:Vue磨刀嚯嚯

    本文链接:https://www.haomeiwen.com/subject/gqbjuftx.html