美文网首页
Vuex和Vue-Router

Vuex和Vue-Router

作者: 林肯公园_97cc | 来源:发表于2018-01-05 16:49 被阅读0次

vuex和vue-router是vue生态系统中的很重要的两个工具

vuex 是vue用来管理数据状态的一种机制,将Vue中所有的状态(数据)抽离出来进行统一管理,一般来说,如果不是大型单页项目,像SPA这些,也是不会去使用vuex的,毕竟vue是一个轻量级的框架,启动快是它的特点,所以vue的优化就有很大的一点是尽可能的减少依赖数量,达到优化加载速度。

        首先就是引入vuex,一种是直接引入vuex.js的文件,以script标签引入,另一种是利用npm install -g --dev全局安装开发时依赖,安装完依赖之后就是引入vuex模块,

import Vuex from "vuex"

import Vue from "vue"

之后通过显示的调用vuex

Vue.use(Vuex)

创建实例store

    const  store  = new Vuex.store({

        state:{},

        getters:{}.

        mutatios:{},

        actions:{}

}),

我们还要在vue实例中去引入,注入store

        new  Vue({

        store:store

})

vuex属性:state :{}存放数据的集合;getters:{},通过对state里面数据的操作,进而改变数据的状态,一般会使用数组迭代方法map(),filter()等,功能类似于vue实例中的computed计算属性,但他还有一个重要作用,在后面映射到vue实例的时候,这个后面再讲。

        mutations:{}这个集合可以直接操作state里面的内容,可直接对state的数据状体进行操作,重要的是,在该集合内只能进行同步操作,不允许异步操作,也就是说,在mutations里面不能进行ajax或asnyc和await等操作,要进行这些操作我们在Actions:{}里面。这里会传入一个参数state(作为第一个参数,所以亦可以传入其他的参数,称为载荷Payload),就是上面的state集合,从这里对state数据进行操作

        Actions:{} 作用有点类似vue实例的methods:{},存放各种方法的地方,唯有这里才能够进行异步操作,但是这个集合不能直接对state里的数据进行改变。这里操作改变的是对象是mutations里的数据,这里使用的方法会自动引入一个参数context,通过context.commit("")来对数据的操作(唤醒mutations的handler),该context对象具有和store实例的相同的方法和属性,或者也可以使用context.state()或context.getters(),有时候我们也想使用actions里面的其他方法,我们就用context.dispatch("其他方法名") 进行触发,之所以这么做,是因为actions可以异步执行,而mutations只能同步。

        将vuex实例中actions的映射到methods:

        将vuex实例中的mutations的映射到computed(可映射多个):

        computed:{

            ...Vuex.mapMutations(["methods1","methods2"])

}

        改变突变mutations,使用commit("mehtods");

当项目越写也大的时候,一个store实例已经不够用了,这时候就有一种module机制,将一个个store实例分成一个个模块,然后将其暴露出来,

这时候vue实例里注入vuex就不那么写了(注入之前要将module暴露export default,否则无效)

         new  Vue({

        module:{

        storeA:storeA,

         storeB:storeB,

         storeC:storeC

            }

        });

Vue-Router   vue的路由机制

大型单页面的应用,当我们要跳转到另一个不同的页面时,使用a标签跳转是行不通的,只能使用路由,vue提供了一套完整的路由机制,以适应各种复杂的跳转情况。

        引入vue-router:

        npm install vue-router

        创建实例

            const router = new VueRouter({

routes:[{

    component:"component",

    path:"path",

        children:[{

        component:"myRouter",

        path:"/childrenpath"

}]

}]

});

目标路由的写法:

var myRouter = {

    template:"<div></div>"

},

将路由注入到vue实例中:

new Vue({

    el:“#app”,

        router:router

});

这样一个简单的路由实例就完成了,

接下就是路由的渲染:

<router-view></router-view>  将这段代码放在你需要加载路由的地方,路由就会完成渲染。

除此之外你还需要写一段a标签,将routes里的path放到a标签的href属性里,并在path之前加#/

或者直接写<router-link to="path">路由</router-link>  用于路径导航,实现路由的注入。

二级路由:

          <router-link to="path/path">二级路由<router-link>

            同时将routes对象里的children子路由路径path设为你的二级路由的路径地址

渲染方式

将<view-router></view-router>插入一级路由的模板template下

相关文章

网友评论

      本文标题:Vuex和Vue-Router

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