VUE에서 배열 업데이트 기능을 구현하는 방법

亚连
풀어 주다: 2018-06-20 15:07:35
원래의
1957명이 탐색했습니다.

이 글은 주로 VUE 배열 업데이트 문제를 소개합니다. Vue가 데이터 변경 사항을 모니터링하는 방법을 소개합니다. 필요한 친구는 참고할 수 있습니다.

(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>
    <p id="app">
      <ul>
        <template v-for="book in books">
          <li>书名:{{book.name}}</li>
          <li>作者:{{book.author}}</li>
        </template>
      </ul>
    </p>
    <script src="https://cdn.bootcss.com/vue/2.5.9/vue.min.js"></script>
    <script type="text/javascript">
      var app = new Vue({
        el: &#39;#app&#39;,
        data: {
          books: [{
              name: &#39;vuejs&#39;,
              author: &#39;a&#39;
            },
            {
              name: &#39;js高级&#39;,
              author: &#39;b&#39;
            },
            {
              name: &#39;java&#39;,
              author: &#39;c&#39;
            }
          ]
        }
      });
      //直接可以使得视图改变
      //app.books.push({name: &#39;c++&#39;,author: &#39;d&#39;});
      //需要更新原数组
      app.books = app.books.concat([{name: &#39;c++&#39;,author: &#39;d&#39;}]);
    </script>
  </body>
</html>
로그인 후 복사

참고: 다음은 뷰 업데이트를 트리거하지 않습니다.

(1) 인덱스별로 항목을 직접 설정합니다.

(2) 배열 길이 app.books.length=1을 수정합니다.

원본 배열을 변경하고 싶지 않은 경우 계산된 속성을 사용하여 다음과 같이 배열을 필터링할 수 있습니다.

 <!DOCTYPE html>
<html lang="zh">
  <head>
    <meta charset="UTF-8" />
    <title>vue示例</title>
  </head>
  <body>
    <p id="app">
      <ul>
        <template v-for="book in filterBooks">
          <li>书名:{{book.name}}</li>
          <li>作者:{{book.author}}</li>
        </template>
      </ul>
    </p>
    <script src="https://cdn.bootcss.com/vue/2.5.9/vue.min.js"></script>
    <script type="text/javascript">
      var app = new Vue({
        el: &#39;#app&#39;,
        data: {
          books: [{
              name: &#39;vuejs&#39;,
              author: &#39;a&#39;
            },
            {
              name: &#39;js高级111&#39;,
              author: &#39;b&#39;
            },
            {
              name: &#39;java33333&#39;,
              author: &#39;c&#39;
            }
          ]
        },
        computed:{
          filterBooks:function(){
            return this.books.sort(function(a,b){
              return a.name.length>b.name.length?1:-1
            })
          }
        }
      });
    </script>
  </body>
</html>
로그인 후 복사

그렇다면 Vue는 어떻게 데이터 변경을 모니터링합니까?

1) 변경 사항을 추적하는 방법각 구성 요소 인스턴스에는 해당 감시자 인스턴스 개체가 있으며, 이는 구성 요소 렌더링 프로세스 중에 속성을 종속성으로 기록합니다. 나중에 종속성의 설정자가 호출되면 감시자에게 알림이 전달됩니다. 다시 계산되어 관련 구성요소가 업데이트됩니다.

2) 변경 감지 문제

최신 JavaScript의 제한 사항(및 Object.observe 지원 중단)에 따라 Vue는 객체 속성의 추가 또는 삭제를 감지할 수 없습니다. Vue는 인스턴스를 초기화할 때 속성에 대해 getter/setter 변환 프로세스를 수행하므로 Vue가 응답할 수 있도록 변환하려면 속성이 데이터 객체에 존재해야 합니다. 예:

var vm = new Vue({
 data:{
 a:1
 }
})
// `vm.a` 是响应的
vm.b = 2
// `vm.b` 是非响应的
로그인 후 복사

Vue는 이미 생성된 인스턴스에 새로운 루트 수준 반응 속성을 동적으로 추가하는 것을 허용하지 않습니다. 그러나 Vue.set(object, key, value) 메소드를 사용하여 중첩된 객체에 응답 속성을 추가할 수 있습니다:

Vue.set(vm.someObject, &#39;b&#39;, 2)
로그인 후 복사

전역 객체의 별칭이기도 한 vm.$set 인스턴스 메소드를 사용할 수도 있습니다. Vue.set 메소드,

위 내용은 VUE에서 배열 업데이트 기능을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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