Vue基础三(下)

计算属性

  • computed 是Vue中的一个选项
  • 作用:可以将本应该在v中处理的逻辑迁移到vm中,让其更符合MVVM思想
  • 注意:计算属性就相当于计算出来的结果,我们最好不要去更改它
<body>
  <div id="app">
    {{ str.split('').reverse().join('') }}
    <!-- 没有 computed 时这样实现 -->
    <p> {{ newStr }} </p>
    <p> {{ newMsg }} </p>
    <input type="text" v-model = "newMsg">
    <p> title: {{ title }} </p>
  </div>
</body>
<script src="../../lib/vue.js"></script>
<script>
  /* ! 思考:数据需要 反向 输出渲染在页面,如何处理
     str -> you Love yourself !!!
  */
  new Vue({
    el: '#app',
    data: {
      str: 'You love yourself !!! ',
      title: ''
    },
    computed: {
      /* 第一种方式: 方法 */
      newStr () {
        return this.str.split('').reverse().join('')
      },
      /* 第二种方式: 存储器 */
      newMsg: {
        get () {
          return this.str.split('').reverse().join('')
        },
        set ( val ) {
          console.log( val ) // input中的value值,get()中返回的新值
          this.title = val 
        }
      }
    }
  })
</script>

侦听属性

  • watch 是Vue中一个选项
  • 作用:监听数据的变化,当数据发生改变时,添加一些副作用(操作)【 由某一个数据改变而引起的其它的变化 】
  • 深入监听 vs 浅监听【 方法 】
    • 深入监听可以监听多层,而方法只能监听一层
  1. 浅监听
<body>
  <div id="app">
    <button @click = "increment"> + </button>
    <p>count: {{ count }} </p>
  </div>
</body>
<script src="../../lib/vue.js"></script>
<script>
  new Vue({
    el: '#app',
    data: {
      count: 0
    },
    watch: {
      count () {
        /* watch里面key名称就是数据的名称 */
        /* 当我们修改count这个数据时,这个方法自动触发了 */
        /* 
          * 项目中 - 上拉加载
            异步操作 - 数据请求 
        */
        document.title = this.count 
      }
    },
    methods: {
      increment () {
        this.count ++
      }
    }
  })
</script>
  1. 深度监听
<script>
  new Vue({
    el: '#app',
    data: {
      num: {
        count: 0
      }
    },
    watch: {
     num: {
       deep: true, // 深度监听
       handler ( val ) {
         console.log('handler') // handler
         console.log( val )
         document.title = this.num.count
       }
     }
    },
    methods: {
      increment () {
        this.num.count ++
      }
    }
  })
</script>
总结
  • methods vs computed vs watch
    • 事件处理程序:methods
    • watch 有大量数据交互和异步处理时进行
    • computed
      • 有逻辑处理
      • V中像全局变量一样使用

混入

  • minxin
    • 混入的形式
	- 全局混入【不推荐】
<body>
  <div id="app">
    <p> {{ num }} </p>
    <p> {{ msg }} </p>
    <button @click = "aa"> aa </button>
    <button @click = "bb"> bb </button>
  </div>

  <div id="root">
    <!-- 同样生效 -->
      <button @click = "aa"> aa </button>
      <button @click = "bb"> bb </button>
  </div>
</body>
<script src="./js/mixin.js"></script>
<script src="../../lib/vue.js"></script>
<script>
  /* 全局混入   Vue.mixin(config) */
  Vue.mixin({
    methods: {
      ...methods
    }
  })
  
  new Vue({
    el: '#app',
    data: {
      num: 1000,
      msg: 'Vue'
    }
  })

  new Vue({
    el: '#root'
  })
</script>
/* 这个文件就是管 方法的,为了更加好的维护和更新 */
// 全局混入
const methods = {
  aa () {
    alert('aa')
  },
  bb () {
    alert('bb')
  }
}
	- 局部混入
<body>
  <div id="app">
    <p> {{ num }} </p>
    <!-- 2000 -->
    <p> {{ msg }} </p>
    <button @click = "aa"> aa </button>
    <button @click = "bb"> bb </button>
    <p> {{ yybMsg }} </p>
  </div>
</body>
<script src="./js/data.js"></script>
<script src="./js/mixin.js"></script>
<script src="../../lib/vue.js"></script>
<script>
  /* 
    分出去的mixin权利是没有总部(下面Vue的data)的大
  */
  new Vue({
    el: '#app',
    data: {
      yybMsg: 'Vue.js',
      num: 2000
    },
    mixins: [ data,obj ]
  })
</script>
/* 
  这个文件管理数据
*/

const data = {
  data: {
    num: 1000,
    msg: 'Vue'
  }
}
/* 
  局部混入
*/
const  obj = {
  methods: {
    aa () {
      alert('aa')
    },
    bb () {
      alert('bb')
    }
  }
}
- 混入的作用:
	- 将选项中某一个或是多个单独分离出去管理,让职能更加单一高效,符合模块化思想

axios 拦截器

http://www.axios-js.com/docs/

/* axios拦截器 
  * 数据请求前拦截 
  * 数据请求得到结果后拦截
*/
// Add a request interceptor // 添加请求拦截器
axios.interceptors.request.use(function (config) {
    // Do something before request is sent // 在发送请求之前做些什么
    ......
    return config;
  }, function (error) {
    // Do something with request error // 对请求错误做些什么
    return Promise.reject(error);
  });

// Add a response interceptor // 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // Do something with response data // 对响应数据做点什么
    ......
    return response;
  }, function (error) {
    // Do something with response error // 对响应错误做点什么
    return Promise.reject(error);
  });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值