80437700 2017-01-04
实例化vue实例时初始化routerstore状态管理。触发router去渲染对应的组件,然后通过对组件组件的操作来完成状态的变更。
先引入js脚本
<scriptsrc="https://unpkg.com/vue/dist/vue.js"></script>
<scriptsrc="https://unpkg.com/vue-router/dist/vue-router.js"></script>
<scriptsrc="https://unpkg.com/[email protected]"></script>
html <div id="app"> <router-view ></router-view> </div>
js脚本
const Foo = { template: '<div v-on:click="increase">foo{{count1}}</div>', // 该组件的私有数据 data:function(){ return {count:10}; }, computed:{ done:function(){ return this.$store.getters.doneTodos; }, count1:function(){ return this.$store.state.count; } }, methods:{ increase:function(){ this.$store.commit("increase",4); } } } const Bar = { // 该组件的view template: '<div v-on:click="decrease">bar{{count}}</div>', // 该组件的方法 methods:{ decrease:function(){ this.$store.commit("decrease"); } }, // 该组件的计算属性 computed:{ count:function(){ return this.$store.state.count; } } }; const Baz = { template: '<div>baz</div>'} // Vue.component('topic', { // template:"<span>这是topic</span>" // }) // 实例化路由 const router = new VueRouter({ mode: 'history', routes: [ { path: '/bar', name:"bar", component: Bar }, { path: '/foo', name:"foo", component: Foo }, { path: '/other', components: { default: Baz, a: Bar, b: Foo } } ] }) // 初始化store实例 var store=new Vuex.Store({ // 声明需要使用到的共享状态 state:{ todos:[ {id:1,done:true}, {id:2,done:false}, {id:3,done:true} ], count:0 }, // 可以理解为计算属性 getters:{ doneTodos:function(state){ return state.todos.filter(function(todo){ return todo.done; }) } }, // 定义事件 // 组件内部统一通过 this.$store.commit("increase",obj)来进行提交更改需求 mutations:{ increase(state,a,b){ console.log(state,a,b) state.count++; }, decrease:function(state){ console.log("count:"+state.count); state.count--; console.log("count:"+state.count); } } }) window.a=new Vue({ router:router,//绑定路由,传入router实例到vue 组件内部可以通过this.$router来访问路由对象 store:store//将实例化后的store绑定到根节点,则任意组件都可以通过this.$store来访问到store实例 }).$mount("#app");
测试:a.$router.push({name:'bar'}) a.$router.push({name:'foo'})
然后可以进行点击,发现在foo组件下点击后store.count变为1,
切换路由到bar下面后,count也是1.这样便实现了有效管理。