监听data 中的数据

watch : 在vue中表示监听的意思 , 我们可以使用watch来响应数据的变化 监听data 中的数据

watch: {
    //监听data 中的数据
    // 单引号 '' 可以省略  ->  name(newValue){...}
    'name'(newValue,oldValue){
        console.log(oldValue,'<===原来 to 新===>',newValue)
    }
}

使用监听器

watch : 监听器 , 可以监听某个属性.

基本格式 : function(newVal , oldVal)

init

  <div id="app">
    <!-- 
      分析:如果使firstName和lastName被修改时,同步修改fullName?
     -->
    <input type="text" v-model="firstName">
    <input type="text" v-model="lastName">
    <input type="text" v-model="fullName">

  </div>

01 监听器watch

<script>
  var vue = new Vue({
    el: '#app',
    data: {
      firstName: '',
      lastName: '',
      fullName: ''
    },
    methods: {
      // 第一种方式:给前两个表单加上键盘抬起事件。当触发事件时,拼接两个name,为fullName赋值。
      handlerFullName() {
        this.fullName = this.firstName + this.lastName
      }
    },
    watch: { // 监听器,可以监听某个属性
        'firstName': function(newVal, oldVal) { // 格式:要监听的属性:function(newVal, oldVal)
          this.fullName = newVal + this.lastName
        },
        // 使用监听器,可以直接对属性进行监听,不需要去监听用户的操作。使开发者只关注Model,不关注View
        'lastName': function(newVal, oldVal) {
          this.fullName = this.firstName + newVal
        }
    }
  })

</script>

监听路由

  var vue = new Vue({
      el: '#app',
      data: {
      },
      router: routerObj,
      watch: {
        '$route.fullPath': function(newVal, oldVal) {
          // 监听路由去执行对应的逻辑
          // 应用场景:监听路由的url是否为登录url.如果不是,校验用户是否登录,未登录的情况下跳转到登录页
          console.log('用户路由跳转,url为:',  newVal)
        }
      }
    })

编程路由导航

  var vue = new Vue({
      el: '#app',
      data: {
      },
      methods: {
        toLogin() {
          // 编程式导航:通过代码去操作路由
          // this.$router.push('/login')
          // 编程式路由如何传递参数
          
          this.$router.push({
            path: '/login', 
            params: {id: '2121', name: '呵呵'}
          })
        }
      } 
  • 通过 路由配置的Name 属性, this.$router.push({ name: 'User', params: { id: 56 } })
  • 通过 path 路径的方式传递使用 query


  • 1 直接在路由中传参

this.$router.push({ path: /childPage/${id}, })

需要对应路由配置如下:

{
 path: '/childPage/:id',
 name: 'childPage',
 component: childPage
}

获取参数:this.$route.parames.id

    1. 通过路由属性中的name来确定匹配的路由,通过params来传递参数

this.$router.push({ name: 'childPage', params: { id: id } })

需要对应路由配置如下:

    {

      path: '/childPage',

      name: 'childPage',

      component: childPage

     }
  • 3)使用path来匹配路由,然后通过query来传递参数
  • this.$router.push({ path: '/childPage', query: { id: id } })

需要对应路由配置如下:

    {

        path: '/childPage',

        name: 'childPage',

        component: childPage

       }
  • 获取参数:this.$route.query.id

watch Object

  • 监听对象
watch: {
	tobj:{
		handler(new_value,old_value){
			console.log(new_value,old_value)
		},
		deep: true
	}
}

添加deep属性,向下添加监听到每一个key,deep默认是false