1基本使用

函数中两个参数:newVal表示更新过的值,oldVal表示原来没有更新过的值 使用watch属性可以监视data中指定数据的变化,然后触发watch中对应的function处理函数

  1. <div id="app">
  2. <input type="text" v-model="num1">
  3. +
  4. <input type="text" v-model="num2">
  5. =
  6. <input type="text" v-model="num3">
  7. </div>
  8. <script src="../js/vue.js"></script>
  9. <script>
  10. const vm=new Vue({
  11. el:"#app",
  12. data:{
  13. num1:"",
  14. num2:"",
  15. num3:""
  16. },
  17. watch: {
  18. //newVal表示更新过的值,oldVal表示原来没有更新过的值
  19. //使用watch属性可以监视data中指定数据的变化,然后触发watch中对应的function处理函数
  20. //这里的'num1','num2'是指this.num1,this.num2
  21. 'num1':function(newVal,oldVal){
  22. this.num3=newVal+this.num2
  23. },
  24. 'num2':function(newVal,oldVal){this.num1
  25. this.num3=this.num1+newVal
  26. }
  27. },
  28. })

2.监听路由

  1. <div id="app">
  2. <router-link to="/login" tag="button">登录</router-link>
  3. <router-link to="/register" tag="button">注册</router-link>
  4. <!-- 容器 -->
  5. <router-view></router-view>
  6. </div>
  7. <!-- 登录组件 -->
  8. <template id="login">
  9. <div>
  10. 这是登录组件
  11. </div>
  12. </template>
  13. <!-- 注册组件 -->
  14. <template id="register">
  15. <div>
  16. 这是注册组件
  17. </div>
  18. </template>
  19. <script src="../js/vue.js"></script>
  20. <script src="../js/vue-router.js"></script>
  21. <script>
  22. const Login={
  23. template:"#login"
  24. }
  25. const Register={
  26. template:"#register"
  27. }
  28. const router=new VueRouter({
  29. routes:[{
  30. path:"",
  31. redirect: "/login"
  32. },
  33. {
  34. path:"/login",
  35. component:Login
  36. },
  37. {
  38. path:"/register",
  39. component:Register
  40. }],
  41. linkActiveClass: 'myactive' ,
  42. // mode:"history"
  43. })
  44. const vm=new Vue({
  45. el:"#app",
  46. data:{
  47. },
  48. methods:{
  49. },
  50. router,
  51. components: {
  52. Login,
  53. Register
  54. },
  55. watch:{
  56. //这里$route.path指的就是this.router.path
  57. "$route.path":function(newVal,oldVal){
  58. if(newVal==="/login"){
  59. console.log("欢迎进入登录页面");
  60. }
  61. else if(newVal==="/register"){
  62. console.log("欢迎进入注册页面");
  63. }
  64. }
  65. }
  66. })
  67. </script>

3.监听多个事件

  1. <template>
  2. <div>
  3. <button @click="changename">调用</button>
  4. </div>
  5. </template>
  6. <script>
  7. export default {
  8. data(){
  9. return {
  10. name: 'Joe'
  11. }
  12. },
  13. watch: {
  14. name: [
  15. 'sayName1',
  16. function(newVal, oldVal) {
  17. this.sayName2()
  18. },
  19. {
  20. handler: 'sayName3',
  21. immaediate: true
  22. }
  23. ]
  24. },
  25. methods: {
  26. sayName1() {
  27. console.log('sayName1==>', this.name)
  28. },
  29. sayName2() {
  30. console.log('sayName2==>', this.name)
  31. },
  32. sayName3() {
  33. console.log('sayName3==>', this.name)
  34. },
  35. //这里修改name属性,通过修改name属性来触发watch中的事件
  36. changename(){
  37. this.name="wangsu"
  38. }
  39. }
  40. }
  41. </script>

4.深度监听