VUE 배열 업데이트 에 대한 자세 한 설명

1.데이터 방법 분류:
(1)원수 그룹 변경
push
 pop
 unshift
 shift
 reverse
 sort
 splice
(2)원래 배열 이 변 하지 않 고 새 배열 생 성
slice
 concat
 filter
원 배열 을 변화 시 키 는 방법 에 대해 서 는 보 기 를 직접 업데이트 할 수 있 습 니 다.
원 배열 이 변 하지 않 는 방법 에 대해 서 는 새로운 배열 로 원래 의 배열 을 교체 하여 보 기 를 변화 시 킬 수 있 습 니 다.
예제 코드:

<!DOCTYPE html>
<html lang="zh">
  <head>
    <meta charset="UTF-8" />
    <title>vue  </title>
  </head>
  <body>
    <div id="app">
      <ul>
        <template v-for="book in books">
          <li>  :{{book.name}}</li>
          <li>  :{{book.author}}</li>
        </template>
      </ul>
    </div>
    <script src="https://cdn.bootcss.com/vue/2.5.9/vue.min.js"></script>
    <script type="text/javascript">
      var app = new Vue({
        el: '#app',
        data: {
          books: [{
              name: 'vuejs',
              author: 'a'
            },
            {
              name: 'js  ',
              author: 'b'
            },
            {
              name: 'java',
              author: 'c'
            }
          ]
        }
      });
      //          
      //app.books.push({name: 'c++',author: 'd'});
      //       
      app.books = app.books.concat([{name: 'c++',author: 'd'}]);
    </script>
  </body>
</html>
메모:아래 는 보기 의 업 데 이 트 를 촉발 하지 않 습 니 다.
(1)색인 을 통 해 항목 을 직접 설정 합 니 다.
(2)배열 길 이 를 수정 합 니 다.app.books.length=1.
원래 배열 을 바 꾸 지 않 으 려 면 계산 속성 을 사용 하여 배열 을 걸 러 낼 수 있 습 니 다.예 를 들 어:

 <!DOCTYPE html>
<html lang="zh">
  <head>
    <meta charset="UTF-8" />
    <title>vue  </title>
  </head>
  <body>
    <div id="app">
      <ul>
        <template v-for="book in filterBooks">
          <li>  :{{book.name}}</li>
          <li>  :{{book.author}}</li>
        </template>
      </ul>
    </div>
    <script src="https://cdn.bootcss.com/vue/2.5.9/vue.min.js"></script>
    <script type="text/javascript">
      var app = new Vue({
        el: '#app',
        data: {
          books: [{
              name: 'vuejs',
              author: 'a'
            },
            {
              name: 'js  111',
              author: 'b'
            },
            {
              name: 'java33333',
              author: 'c'
            }
          ]
        },
        computed:{
          filterBooks:function(){
            return this.books.sort(function(a,b){
              return a.name.length>b.name.length?1:-1
            })
          }
        }
      });
    </script>
  </body>
</html>
그렇다면 vue 는 데이터 의 변 화 를 어떻게 감청 합 니까?
1)변화 추적 방법
모든 구성 요소 인 스 턴 스 는 해당 하 는 watcher 인 스 턴 스 대상 이 있 습 니 다.구성 요소 가 렌 더 링 하 는 과정 에서 속성 을 의존 으로 기록 한 다음 의존 항목 의 setter 가 호출 될 때 watcher 에 게 다시 계산 하 라 고 알려 주 고 관련 구성 요 소 를 업데이트 합 니 다.
2)변화 검출 문제
현대 자 바스 크 립 트 의 제한(및 Object.observe 폐기)으로 인해 Vue 는 대상 속성의 추가 나 삭 제 를 감지 할 수 없습니다.Vue 는 인 스 턴 스 를 초기 화 할 때 속성 에 대해 getter/setter 전환 과정 을 실행 하기 때문에 속성 은 data 대상 에 존재 해 야 Vue 를 변환 할 수 있 습 니 다.그래 야 응답 할 수 있 습 니 다.예 를 들 면:

var vm = new Vue({
 data:{
 a:1
 }
})
// `vm.a`     
vm.b = 2
// `vm.b`      
Vue 는 생 성 된 인 스 턴 스 에 새 루트 응답 속성(root-level reactive property)을 동적 으로 추가 할 수 없습니다.그러나 Vue.set(object,key,value)방법 으로 응답 속성 을 끼 워 넣 은 대상 에 추가 할 수 있 습 니 다.

Vue.set(vm.someObject, 'b', 2)
vm.$set 인 스 턴 스 방법 도 사용 할 수 있 습 니 다.전역 Vue.set 방법의 별명 이기 도 합 니 다.👇우리 가 프로젝트 에서 사용 한 것 입 니 다.this.imgLen=3.목적 은 this.userImgs=["심사 성공","심사 성공","심사 성공","심사 성공"]

var _this=this
for (var i = 0; i <this.imgLen;i++) {
  if(_this.userImgsh[i] === '    ') continue;
    _this.$set(_this.userImgsh, i, '    ');
}
총결산
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 상세 한 VUE 배열 업데이트 문제 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기