美文网首页
watch用法

watch用法

作者: 零界梦忆 | 来源:发表于2020-01-19 15:37 被阅读0次

    watch是一个对象,键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象。Vue 实例将会在实例化时调用 $watch(),遍历 watch 对象的每一个属性。
    关键点:
    watch是一个对象
    watch监听复杂对象的deep和直接监听的模式
    注意点:
    注意,不应该使用箭头函数来定义 watcher 函数 (例如 searchQuery: newValue => this.updateAutocomplete(newValue))。理由是箭头函数绑定了父级作用域的上下文,所以 this 将不会按照期望指向 Vue 实例,this.updateAutocomplete 将是 undefined。
    上代码

    <html>
      <head>
        <title>监听器 watch</title>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
      </head>
      <body>
        <div id="root">
          <h3>Watch 用法1:常见用法</h3>
          <input v-model="message">
          <span>{{copyMessage}}</span>
        </div>
        <div id="root2">
          <h3>Watch 用法2:绑定方法</h3>
          <input v-model="message">
          <span>{{copyMessage}}</span>
        </div>
        <div id="root3">
          <h3>Watch 用法3:deep + handler</h3>
          <input v-model="deepMessage.a.b">
          <span>{{copyMessage}}</span>
        </div>
        <div id="root4">
          <h3>Watch 用法4:immediate</h3>
          <input v-model="message">
          <span>{{copyMessage}}</span>
        </div>
        <div id="root5">
          <h3>Watch 用法5:绑定多个 handler</h3>
          <input v-model="message">
          <span>{{copyMessage}}</span>
        </div>
        <div id="root6">
          <h3>Watch 用法6:监听对象属性</h3>
          <input v-model="deepMessage.a.b">
          <span>{{copyMessage}}</span>
        </div>
          
        <script>
          new Vue({
            el: '#root',
            watch: {
              message(value) {
                this.copyMessage = value
              }
            },
            data() {
              return {
                message: 'Hello Vue',
                copyMessage: ''
              }
            }
          })
          new Vue({
            el: '#root2',
            watch: {
              message: 'handleMessage'
            },
            data() {
              return {
                message: 'Hello Vue',
                copyMessage: ''
              }
            },
            methods: {
              handleMessage(value) {
                this.copyMessage = value
              }
            }
          })
          new Vue({
            el: '#root3',
            watch: {
              deepMessage: {
                handler: 'handleDeepMessage',
                deep: true
              }
            },
            data() {
              return {
                deepMessage: {
                  a: {
                    b: 'Deep Message'
                  }
                },
                copyMessage: ''
              }
            },
            methods: {
              handleDeepMessage(value) {
                this.copyMessage = value.a.b
              }
            }
          })
          new Vue({
            el: '#root4',
            watch: {
              message: {
                handler: 'handleMessage',
                immediate: true,
              }
            },
            data() {
              return {
                message: 'Hello Vue',
                copyMessage: ''
              }
            },
            methods: {
              handleMessage(value) {
                this.copyMessage = value
              }
            }
          }),
          new Vue({
            el: '#root5',
            watch: {
              message: [{
                handler: 'handleMessage',
              },
              'handleMessage2',
              function(value) {
                this.copyMessage = this.copyMessage + '...'
              }]
            },
            data() {
              return {
                message: 'Hello Vue',
                copyMessage: ''
              }
            },
            methods: {
              handleMessage(value) {
                this.copyMessage = value
              },
              handleMessage2(value) {
                this.copyMessage = this.copyMessage + '*'
              }
            }
          })
          new Vue({
            el: '#root6',
            watch: {
              'deepMessage.a.b': 'handleMessage'
            },
            data() {
              return {
                deepMessage: { a: { b: 'Hello Vue' } },
                copyMessage: ''
              }
            },
            methods: {
              handleMessage(value) {
                this.copyMessage = value
              }
            }
          })
        </script>
      </body>
    </html>
    

    相关文章

      网友评论

          本文标题:watch用法

          本文链接:https://www.haomeiwen.com/subject/tkbrzctx.html