import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex);
/*1.state在vuex中用于存储数据*/
var state={
count:1,
list:[]
}
/*2.mutations里面放的是方法,方法主要用于改变state里面的数据
*/
var mutations={
incCount(){
++state.count;
},
addList(state,data){
state.list = data;
}
}
/*3、优点类似计算属性 , 改变state里面的count数据的时候会触发 getters里面的方法 获取新的值 (基本用不到)*/
var getters= {
computedCount: (state) => {
return state.count*2
}
}
/*
4、 基本没有用
Action 类似于 mutation,不同在于:
Action 提交的是 mutation,而不是直接变更状态。
Action 可以包含任意异步操作。
*/
var actions= {
incMutationsCount(context) { /*因此你可以调用 context.commit 提交一个 mutation*/
context.commit('incCount'); /*执行 mutations 里面的incCount方法 改变state里面的数据*/
}
}
//vuex 实例化 Vuex.store 注意暴露
const store = new Vuex.Store({
state,
mutations,
getters,
actions
})
export default store;
<template>
<!-- 所有的内容要被根节点包含起来 -->
<div id="home" style="padding:20px;">
我是首页组件 -- {{this.$store.state.count}} ----{{this.$store.getters.computedCount}}
<button @click="incCount()">增加数量+</button>
</div>
</template>
<script>
//1. 引入store 建议store的名字不要变
import store from '../vuex/store.js';
//2.注册
export default{
data(){
return {
msg:'我是一个home组件',
value1: null,
}
},
store,
methods:{
incCount(){
//改变vuex store里面的数据
//this.$store.commit('incCount'); /*触发 mutations 改变 state里面的数据*/
this.$store.dispatch('incMutationsCount'); /*触发 actions里面的方法 */
}
}
}
</script>
<style lang="scss" scoped>
</style>
<template>
<div id="news">
我是新闻组件 --{{this.$store.state.count}}
<br>
<button @click="incCount()">增加数量</button>
<br><br>
<br><br>
<ul>
<li v-for="item in list">
{{item.title}}
</li>
</ul>
</div>
</template>
<script>
//1. 引入store
import store from '../vuex/store.js';
export default{
data(){
return {
msg:'我是一个新闻组件',
list:[]
}
},
store,
methods:{
incCount(){
this.$store.commit('incCount');
},
requestData(){
//请求数据
var api='http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20&page=1';
this.$http.get(api).then((response)=>{
console.log(response);
//注意this指向
this.list=response.body.result;
//数据放在store里面
this.$store.commit('addList',response.body.result);
},function(err){
console.log(err);
})
}
},mounted(){
//判断 store里面有没有数据
var listData=this.$store.state.list;
console.log(listData.length);
if(listData.length>0){
this.list=listData;
}else{
this.requestData();
}
}
}
</script>
<style lang="scss" scoped>
.list{
li{
height:3.4rem;
line-height:3.4rem;
boder-bottom:1px solid #eee;
font-size:1.6rem;
a{
color:#666;
}
}
}
</style>