Vue 인스턴스 메소드 및 데이터에 대한 자세한 설명

小云云
풀어 주다: 2018-01-04 10:09:32
원래의
956명이 탐색했습니다.

이 글은 Vue 인스턴스 메소드와 데이터에 대한 관련 정보를 주로 소개합니다. 매우 훌륭하고 참고할 가치가 있습니다. 필요한 친구들이 참고하면 도움이 될 것입니다.

1.vm.$set

문제 설명:

데이터를 반복하지 않고 목록 데이터에 showMore 속성을 추가하고 moreFun에서 이 새 속성의 값을 변경하고 양방향 바인딩을 달성하는 방법은 무엇입니까?

<template>
 <p id="app">
  <p class="demo">
   <ul>
    <template v-for="(v,index) in list">
     <li>{{v.name}}</li>
     <p v-show="!v.showMore">
      <button @click="moreFun(index)">展示更多</button>
     </p>
    </template>
   </ul>
  </p>
 </p>
</template>
<script>
export default {
 name: 'app',
 data() {
  return {
   list: [{
    name: '小颖'
   }, {
    name: '仔仔'
   }, {
    name: '黑妞'
   }, {
    name: '土豆'
   }]
  }
 },
 methods: {
  moreFun(index) {
   console.log(this.list);
  }
 }
}
</script>
<style>
#app {
 font-family: 'Avenir', Helvetica, Arial, sans-serif;
 -webkit-font-smoothing: antialiased;
 -moz-osx-font-smoothing: grayscale;
 text-align: center;
 color: #2c3e50;
 margin-top: 60px;
}
</style>
로그인 후 복사

처음에 Xiaoying은 어떻게 해야 할지 몰랐고

 <p v-show="!v.showMore">
      <button @click="moreFun(index)">展示更多</button>
     </p>
로그인 후 복사

이 코드는 확실히 오류를 보고할 것이라고 생각했습니다. 그러나 Xiaoying이 코드를 작성했을 때 그렇지 않다는 것을 알게 되었습니다. 잘 생긴 남자가 나에게 vue의 vm.$set를 살펴보라고 말했습니다. 그것을 읽은 후 Xiaoying은 moreFun 메소드를 다음과 같이 작성했습니다:

 moreFun(index) {
   this.$set(this.list[index], 'showMore', true);
   console.log(this.list);
  }
로그인 후 복사

그러면 Xiaoying이 원했던 결과가 달성되었습니다. 당시 Xiaoying이 직면한 문제는 다음과 유사했습니다.


<script>
export default {
 name: 'app',
 data() {
  return {
   list: [{
    name: '小颖'
   }, {
    name: '仔仔'
   }, {
    name: '黑妞'
   }, {
    name: '土豆'
   }]
  }
 },
 mounted: function() {
  this.list.forEach(function(element, index) {
   element.showMore = false;
  });
 },
 methods: {
  moreFun(index) {
   this.list[index].showMore = true;
   console.log(this.list);
  }
 }
}
</script>
로그인 후 복사

문제: moreFun 메서드를 실행한 후 목록의 showMore 속성 값이 true가 되었음에도 불구하고

<p v-show="!v.showMore"> <button @click="moreFun(index)">展示更多</button> </p>
로그인 후 복사

버튼 더보기가 계속 표시됩니다. 인스턴스가 생성된 후 인스턴스에 새 속성을 추가하면 뷰 업데이트가 트리거되지 않기 때문입니다.

그래서 나중에 Xiaoying이 showMore를 목록에 직접 추가했더니 괜찮았습니다. 지금 생각해보면 vm.$set로 해결이 가능하네요.

2.vm.$watch

사용법:

Vue 인스턴스 변경에 대한 표현식 또는 계산된 속성 함수를 관찰합니다. 콜백 함수에서 얻은 매개변수는 새 값과 이전 값입니다. 표현식은 감독된 키 경로만 허용합니다. 더 복잡한 표현식의 경우 대신 함수를 사용하세요.

참고: 객체 또는 배열을 변경(교체하지 않음)할 때 해당 참조가 동일한 객체/배열을 가리키기 때문에 이전 값은 새 값과 동일합니다. Vue는 돌연변이 이전의 값 사본을 보관하지 않습니다.

<template>
 <p id="app">
  <p class="demo">
   <input type="text" class="num1" v-model="num1">
   <label class="sign">-</label>
   <input type="text" class="num2" v-model="num2">
   <label class="sign">=</label>
   <label class="result">{{resultNum}}</label>
  </p>
 </p>
</template>
<script>
export default {
 name: 'app',
 data() {
  return {
   num1: 1,
   num2: 5,
   resultNum: null
  }
 },
 watch: {
  num1: function() {
   var _num1 = parseInt(this.num1);
   var _num2 = parseInt(this.num2);
   this.resultNum = _num1 - _num2;
  },
  num2: function() {
   var _num1 = parseInt(this.num1);
   var _num2 = parseInt(this.num2);
   this.resultNum = _num1 - _num2;
  }
 },
 mounted: function() {
  var _num1 = parseInt(this.num1);
  var _num2 = parseInt(this.num2);
  this.resultNum = _num1 - _num2;
 }
}
</script>
<style>
#app {
 font-family: 'Avenir', Helvetica, Arial, sans-serif;
 -webkit-font-smoothing: antialiased;
 -moz-osx-font-smoothing: grayscale;
 text-align: center;
 color: #2c3e50;
 margin-top: 60px;
}
input.num1,
input.num2 {
 width: 100px;
}
label.sign {
 font-size: 30px;
 vertical-align: -3px;
}
label.result {
 font-size: 20px;
}
</style>
로그인 후 복사

3.vm.$delete

사용법:

이것은 전역 Vue.delete의 별칭입니다.

<template>
 <p id="app">
  <p class="demo">
   <ul>
    <template v-for="(v,index) in list">
     <li>{{v.name}}</li>
     <li>{{v.age}}</li>
     <button @click="deleteFun(index)">delete</button>
    </template>
   </ul>
  </p>
 </p>
</template>
<script>
export default {
 name: 'app',
 data() {
  return {
   list: [{
    name: '小颖',
    age:22
   }, {
    name: '仔仔',
    age:1
   }, {
    name: '黑妞',
    age:1
   }, {
    name: '土豆',
    age:1
   }]
  }
 },
 methods: {
  deleteFun(index) {
   this.$delete(this.list[index], 'age');
  }
 }
}
</script>
<style>
#app {
 font-family: 'Avenir', Helvetica, Arial, sans-serif;
 -webkit-font-smoothing: antialiased;
 -moz-osx-font-smoothing: grayscale;
 text-align: center;
 color: #2c3e50;
 margin-top: 60px;
}
</style>
로그인 후 복사

관련 권장 사항:

vue-cli 프로젝트에서 mockjs 사용에 대한 자세한 설명

vue의 이미지를 사용하여 vue-lazyload 플러그인을 지연 로드

전역 변수 및 전역 함수 방법 정의 vue 프로젝트에서

위 내용은 Vue 인스턴스 메소드 및 데이터에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿