Vue.js框架--Vuex实现组件里数据持久化(二十八)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hlx20080808/article/details/83543674

主要操作技能:

     Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式

     新闻页面每次切换路由时,再次访问就会请求数据;那么如何直接从vuex中持久化数据呢?

      1)在store.js中  state定义list数组

/*1.state在vuex中用于存储数据*/
var state = {
	count: 1,
	list: [] //存储新闻数据
}

    2)在mutations中写方法 addList(state,data)

//2.mutations里面放的是方法,方法主要用于改变state里面的数据

var mutations = {
	addList(state,data) {  //如果有参数必须要有state这个参数哦!
		//		state.list.push(data); //请求的数据存入到list中
		state.list = data;
	}
}

编写代码:

News.vue 传统的方式

     <ul class="list">
			<li v-for="item in list">
				{{item.aid}}--{{item.title}}
			</li>
		</ul>


<script>
	import store from '../vuex/store.js'
	export default {
		data() {
			return {
				title: '新闻组件!',
				list: []

			}
		},
		store,
		methods: {
			changCount2() {
				this.$store.commit('incCount') //触发state里面的数据
			},
			requestData() {
				//新闻列表接口:
				var urls = 'http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20&page=1';

				this.$http.jsonp(urls).then((response) => {
						console.log(response);
						//save list
						this.list = response.data.result;
						
					},
					function(err) { //处理错误的回调
						console.log(err);
					})
			}
		},
		mounted() {

//       this.requestData();
			
		}

	}
</script>

效果:来回切换路由,就会每次请求数据

News.vue 持久化数据

<script>
	import store from '../vuex/store.js'
	export default {
		data() {
			return {
				title: '新闻组件!',
				list: []

			}
		},
		store,
		methods: {
			changCount2() {
				this.$store.commit('incCount') //触发state里面的数据
			},
			requestData() {
				//新闻列表接口:
				var urls = 'http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20&page=1';

				this.$http.jsonp(urls).then((response) => {
						console.log(response);
						//save list
						this.list = response.data.result;
						
						//数据存放到store
						//第一个参数方法名:addList
						//第二个参数数据: response.data.result 
						this.$store.commit('addList',response.data.result);
						
					},
					function(err) { //处理错误的回调
						console.log(err);
					})
			}
		},
		mounted() {
			
			var listData=this.$store.state.list;
			
			console.log(listData.length);
			
			//判断store中有没有数据
			if(listData.length>0){ //有数据
				this.list=listData;
			}else{  //没有请求数据
				this.requestData();
			}

			
		}

	}
</script>

效果:来回切换路由,就会从Vuex中取数据

猜你喜欢

转载自blog.csdn.net/hlx20080808/article/details/83543674