https://cn.vuejs.org/v2/api/#activated

activated

  • 类型Function
  • 详细
    keep-alive 组件激活时调用。
    该钩子在服务器端渲染期间不被调用。

    一、InTheaters/index.vue

    在正在热映的组件中,获取城市发送网络请求

    Tips:在activated生命周期函数中去发送请求

  1. import axios from 'axios-jsonp-pro';
  2. export default {
  3. name: "InTheaters",
  4. data(){
  5. return{
  6. movies:'',
  7. isLoading:true
  8. }
  9. },
  10. activated:async function(){
  11. console.log(1)
  12. var city = this.$store.state.city;
  13. var url =`https://douban-api.zce.now.sh/v2/movie/in_theaters?city=${city}`;
  14. var data = await axios.jsonp(url)
  15. this.movies = data.subjects;
  16. this.isLoading = false
  17. }
  18. };

二、同一城市,不要重复发送网路请求

1.data中定义prevCity记录之前的城市 2.网络请求发送完毕之后记录城市 3.发送请求之前,判断当前城市和之前的城市是否一样。

  1. export default {
  2. name: "InTheaters",
  3. data(){
  4. return{
  5. movies:'',
  6. isLoading:true,
  7. //记录先前的城市
  8. prevCity:""
  9. }
  10. },
  11. activated:async function(){
  12. var city = this.$store.state.city;
  13. if(this.prevCity === city){
  14. return false
  15. }
  16. var url =`https://douban-api.zce.now.sh/v2/movie/in_theaters?city=${city}`;
  17. var data = await axios.jsonp(url)
  18. this.movies = data.subjects;
  19. this.isLoading = false
  20. /* 发送请求完毕之后,记录一下city */
  21. this.prevCity = city;
  22. }
  23. };
  24. </script>