>  기사  >  웹 프론트엔드  >  vue 객체의 listening 속성은 무엇을 나타냅니까?

vue 객체의 listening 속성은 무엇을 나타냅니까?

青灯夜游
青灯夜游원래의
2022-12-14 19:46:592441검색

vue 객체의 listening 속성은 "watch"로 표현됩니다. 소위 모니터링은 내장 개체의 상태나 속성의 변경 사항을 모니터링하고 이에 응답하는 것입니다. 속성 모니터링은 다른 데이터의 변경 사항을 모니터링할 수 있음을 의미합니다. Vue에 모니터링 속성을 작성하는 방법에는 두 가지가 있습니다. 1. "new Vue()"에 watch 구성을 전달합니다. 2. "vm.$watch"를 통해 모니터링합니다.

vue 객체의 listening 속성은 무엇을 나타냅니까?

이 튜토리얼의 운영 환경: windows7 시스템, vue3 버전, DELL G3 컴퓨터.

watch Listening 속성

소위 모니터링은 내장 개체의 상태나 속성 변경을 모니터링하고 그에 따라 응답하는 것을 의미합니다. 다른 데이터의 변경 사항을 모니터링할 수 있습니다.

때때로 필요한 파생 데이터가 비동기식으로 처리되는 경우가 있습니다. 이때 계산된 속성은 사용하기 쉽지 않습니다(비동기식으로 처리할 수 없음). 다른 옵션을 사용할 수 있습니다: watch

watch: 모니터링되는 것은 데이터의 속성입니다. 속성이 변경되면 다음과 같이 청취 속성을 작성하는 두 가지 방법이 있습니다.

new Vue()의 watch 구성을 전달합니다.

  • vm.$watch를 통해 모니터링하세요.

    new Vue()中传入watch配置。

  • 通过vm.$watch进行监听。

看个具体的例子。

  • 在new Vue()中传入watch配置。
    <div>
        <div>今天天气很{{info}}</div>
<br>
        <button>切换天气</button>
    </div>
    <script>
        Vue.config.productionTip = false;

        new Vue({
            el:"#root",
            data:{
                isHot:true
            },
            computed:{
                info(){
                    return this.isHot ? "炎热" : "凉爽";
                }
            },
            methods:{
                changeWeather(){
                    this.isHot = !this.isHot;
                }
            },
            watch:{
                isHot:{
                    immediate:true,
                    handler(newValue,oldValue){
                        console.log("监听isHot:","newValue="+newValue,"oldValue="+oldValue);
                    }
                }
            }
        })
    </script>

如果watch isHot 时,只提供了回调函数handler,如下:

watch:{
    isHot:{
        handler(newValue,oldValue){
            console.log("isHot:newValue="+newValue,"oldValue="+oldValue);
        }
    }}

则可以简写成如下形式:

watch:{
    isHot(newValue,oldValue){
        console.log("isHot:newValue="+newValue,"oldValue="+oldValue);
    }}
  • 通过vm.$watch进行监听。
    <div>
        <div>今天天气很{{info}}</div>
<br>
        <button>切换天气</button>
    </div>
    <script>
        Vue.config.productionTip = false;

        const vm = new Vue({
            el:"#root",
            data:{
                isHot:true
            },
            computed:{
                info(){
                    return this.isHot ? "炎热" : "凉爽";
                }
            },
            methods:{
                changeWeather(){
                    this.isHot = !this.isHot;
                }
            }
        })

        vm.$watch("isHot",{
            immediate:true,
            handler(newValue,oldValue){
                console.log("监听isHot:","newValue="+newValue,"oldValue="+oldValue);
            }
        })
    </script>

如果watch isHot时,只提供了handler,如下:

vm.$watch("isHot",{
    handler(newValue,oldValue){
        console.log("isHot:newValue="+newValue,"oldValue="+oldValue);
    }})

则可以简写成以下形式:

vm.$watch("isHot",function(newValue,oldValue){
    console.log("isHot:newValue="+newValue,"oldValue="+oldValue);})

打开浏览器,测试下。
vue 객체의 listening 속성은 무엇을 나타냅니까?

深度监听

    <div>
        <div>a的值是{{numbers.a}}</div>
        <button>点我加1</button>
    </div>
    <script>
        Vue.config.productionTip = false;

        new Vue({
            el:"#root",
            data:{
                numbers:{
                    a:1,
                    b:1
                }
            },
            watch:{
                "numbers.a":{
                    handler(newValue,oldValue){
                        console.log("a:","newValue="+newValue,"oldValue="+oldValue);
                    }
                },
                "numbers":{
                    deep:true,
                    handler(newValue,oldValue){
                        console.log("numbers发生了变化!");
                    }
                }
            }
        })

    </script>

监听多级结构的某个属性,如numbers.a,当numbers对象的a属性发生变化时,Vue将侦听到,并执行回调handler。
监听多级结构的所有属性(深度监听),如"numbers":{deep:true}

구체적인 예를 살펴보세요.

    새로운 Vue()에서 watch 구성을 전달하세요.
        <div>
            姓:<input><br><br>
            名:<input><br><br>
            全名:<span>{{fullName}}</span>
        </div>
        <script>
            new Vue({
                el:"#root",
                data:{
                    firstName:"张",
                    lastName:"三",
                    fullName:"张-三"
                },
                watch:{
                    firstName(val){
                        this.fullName = val + this.lastName;
                    },
                    lastName(val){
                        this.fullName = this.firstName + "-" + val;
                    }
                }
            })
        </script>
    watch isHot인 경우 다음과 같이 콜백 함수 핸들러만 제공됩니다.

        <div>
            姓:<input><br><br>
            名:<input><br><br>
            全名:<span>{{fullName}}</span>
        </div>
        <script>
            new Vue({
                el:"#root",
                data:{
                    firstName:"张",
                    lastName:"三"
                },
                computed:{
                    fullName(){
                        return this.firstName+"-"+this.lastName;
                    }
                }
            })
        </script>
    다음과 같은 형식으로 축약할 수 있습니다.
        <div>
            姓:<input><br><br>
            名:<input><br><br>
            全名:<span>{{fullName}}</span>
        </div>
        <script>
            new Vue({
                el:"#root",
                data:{
                    firstName:"张",
                    lastName:"三",
                    fullName:"张-三"
                },
                watch:{
                    firstName(val){
                        setTimeout(() => {
                            this.fullName = val + "-" + this.lastName;
                        },1000);
                    },
                    lastName(val){
                        this.fullName = this.firstName + "-" + val;
                    }
                }
            })
        </script>
    rrreee
    다음 형식으로 축약할 수 있습니다. rrreee브라우저를 열고 테스트해 보세요. 여기에 이미지 설명 삽입

    심층 모니터링

    rrreee

    numbers.a와 같은 다중 레벨 구조의 속성을 모니터링합니다. >, 숫자 객체의 속성이 변경되면 Vue는 콜백 핸들러를 수신하고 실행합니다. "numbers":{deep:true}와 같은 다중 레벨 구조의 모든 속성(심층 모니터링)을 모니터링합니다. 숫자 객체의 속성이 변경되면 Vue는 이를 수신하고 실행할 수도 있습니다. 처리기로 돌아갑니다.

    • 청취 속성 및 계산 속성

    • 청취 속성을 사용하여 구현

    rrreee계산 속성을 사용하여 구현

    🎜rrreee🎜계산 속성을 사용할 수 있는지 확인할 수 있습니다. 완성되다, 청취 속성을 수행할 수 있어야 합니다. 🎜 그러나 속성을 모니터링하여 수행할 수 있는 작업은 데이터 변경 시 비동기 작업을 수행하는 등 반드시 속성을 계산하여 수행할 수 있는 것은 아닙니다. 구체적인 예를 살펴보겠습니다. firstName이 변경되면 fullName이 변경되기 전에 1초 동안 기다리세요. 🎜rrreee🎜🎜[vue] 메소드, 계산된 속성, 데이터 모니터링🎜도 계산된 속성과 모니터링 속성을 비교했습니다. 대부분의 경우 계산된 속성이 더 적합하지만, 데이터가 변경될 때 비동기 작업을 수행해야 하는 경우 리스너 속성이 더 유용합니다. 🎜🎜또한 다시 권장합니다: 🎜🎜🎜🎜Vue에서 관리하는 함수는 일반 함수로 작성하는 것이 가장 좋으므로 함수의 this 지점이 Vue 인스턴스입니다. 🎜🎜🎜🎜타이머 함수, Ajax 콜백 함수, Promise 함수 등 Vue에서 관리하지 않는 함수는 화살표 함수로 작성하는 것이 가장 좋습니다. 화살표 함수에는 자체 this가 없기 때문입니다. 🎜🎜🎜🎜【관련 추천: 🎜vuejs 비디오 튜토리얼🎜, 🎜웹 프론트엔드 개발🎜】🎜

    위 내용은 vue 객체의 listening 속성은 무엇을 나타냅니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.