Vue.js에서 현재 독립된 데이터 범위를 정의합니다
8888 단어 Vue.js
개시하다
Vue.js에서 제작된 구성 요소에서 $data
와는 다른 작용 범위(데이터 영역)를 정의하고 데이터로 예쁘게 나누어 관리할 생각은 없으십니까?
예를 들어 서버 측에서 얻은 데이터(모델: 모델), 구성 요소 내부에서 UI 제어에 사용되는 상징적 데이터, 폼의 확인 결과를 유지하는 데이터 등이다.
이 글은 구성 요소와 개인 데이터의 범위를 구분하고 관리하고자 하는 사람들을 위해 더욱 활발한 독립된 범위를 정의하는 방법을 소개했다.
주의
이번에 소개한 독립된 데이터 범위에 관해서는 사실상 이 방법이다, Vue.js를 사용하여 응용 프로그램을 구축할 때 정말 필요한지 잘 연구하십시오.이유는 다음과 같다.
이번에 소개한 독립된 데이터 범위에 관해서는 사실상 이 방법이다, Vue.js를 사용하여 응용 프로그램을 구축할 때 정말 필요한지 잘 연구하십시오.이유는 다음과 같다.
Vue.공식 문서에 없는 비문서 방식
방법
이것은 독립된 데이터 범위를 정의하는 방법이지만 그리 어렵지 않다.간단해.아래와 같이 진행한다.
1.
에 준비된 객체를 활성 속성으로 호스트에 사용할 Vue 인스턴스defineReactive
에서 1.
및 2.
의 객체 및 속성 키를 매개변수로 지정하여 실행Vue.set
및 Vue.delete
에서 1.
객체의 다음 단계// 1. 独自に管理するデータを入れるオブジェクトを用意する
var myScope = {}
// 2. `1.`で用意したオブジェクトをリアクティブなプロパティとしてホストする Vue インスタンスを用意する
var vm = new Vue({ ... })
// 3. 内部 API `defineReactive` で`1.`と`2.`のオブジェクト、そしてプロパティキーをパラメータに指定して実行する
Vue.util.defineReactive(vm, '$my', myScope)
// 4. 後は、`Vue.set`、`Vue.delete` で`1.`のオブジェクトにゴニュゴニョする
Vue.set(myScope, 'foo', 1) // プロパティ'foo'を設定
Vue.set(myScope, 'bar', { buz: 'hello' }) // プロパティ'bar'を設定
...
Vue.delete(myScope, 'foo') // プロパティ'foo'の削除
그렇게 어렵지 않죠?이곳이 키모가 된 것은
defineReactive
이다.이 유틸리티 내부 API를 호출하지 않으면 독립된 데이터 범위는 다시 시작할 수 없습니다.defineReactive
$data
작용역에서도 사용, Vue.js에서 능동 시스템의 핵심 실용 프로그램 함수가 되었다.defineReactive
에서 호스트 소스를 미리 정의하지 않은 Vue 실례의 재활약은 독립된 데이터 범위에서 관리된 데이터를 아무리 만지작거려도 다시 활성화되지 않고 독립된 데이터 범위의 내용을 보여주지 않는다.또한 호출
Vue.set
/Vue.delete
도 중요하다.Reactivity in Depth(일본어 번역다시 활동하는 탐색에 기재된 바와 같이 이러한 전역적인 방법을 통해 속성을 추가하거나 삭제하지 않으면 속성을 다시 활성화할 수 없습니다.(참고로 Vue.set
/Vue.delete
는 Vue.util.set
/Vue.util.del
의 별명이고 이쪽도 마찬가지입니다.)마지막으로 방법의 총결로 각 실례는 다시 활성화된 독립된 데이터 범위를 정의하고 Vue 실례에서 데이터 범위의 재활동 속성을 추가/삭제하며 example 플러그인의 예시 코드
$addProp
와 $delProp
를 추가한다./**
* 独自スコープを定義するプラグイン
*/
function plugin (Vue) {
/**
* _init をオーバーライドして、独自スコープを Vue インスタンス毎に初期化
*/
var init = Vue.prototype._init
Vue.prototype._init = function (options) {
this._my = {} // 独自スコープのデータを初期化
Vue.util.defineReactive(this, '$my', this._my) // 独自スコープ '$my' を定義
init.call(this, options)
}
/**
* 独自スコープに kye と value でプロパティを追加
*/
Vue.prototype.$addProp = function (key, value) {
Vue.set(this._my, key, value)
}
/**
* 指定された key のプロパティを独自スコープから削除
*/
Vue.prototype.$delProp = function (key) {
Vue.delete(this._my, key)
}
}
데모
상기 플러그인의 example을 제작하여 동작을 보여 줍니다.이쪽gif로 동작을 확인할 수 있습니다.
$data
역할 영역은 Vue 실례의 데이터 범위를 확인할 수 있고 $my
역할 영역은 나 개인의 독립된 데이터 범위의 데이터 내용이다.$my
역할 영역에 속성$data
을 추가해도 역할 영역에 추가되지 않음$my
도 역할 영역에만 추가됨을 확인할 수 있습니다.또한 삭제도 마찬가지로 $my
작용역에서만 삭제되는 것을 확인할 수 있다.
데모 코드
관심 있는 사람들을 위해 여기 시위 코드가 있어요.
관심 있는 사람들을 위해 여기 시위 코드가 있어요.
총결산
Vue 인스턴스$data
는 역할 영역과 분리하여 독립된 데이터 범위를 정의하는 방법을 소개했다.독립된 데이터 역할 영역을 정의함으로써 $data
역할 영역은 응용 프로그램의 본질적인 데이터를 관리할 수 있다.
그러나 응용 프로그램의 구현으로 편입된다면 여러 가지 나쁜 점이 있기 때문이다.js를 업그레이드할 때 언젠가 프로그램이 실행되지 못할 것이라는 각오가 필요합니다.
끝말
실제로 이런 방법은 Vuevue-validator다.js 공식 플러그인 개발 관리자를 맡고 있는 나, v2.0의 실복을 설계할 때 생기는 것이다.표의 검증 데이터는 응용 프로그램의 데이터와 현저히 다르기 때문에 사용자 측$data
의 작용 범위를 더럽히고 싶지 않다.
자신과 같은 질문이 있다면 꼭 해봐야 하나요?
Reference
이 문제에 관하여(Vue.js에서 현재 독립된 데이터 범위를 정의합니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kazupon/items/de24715e18eedb1a6e8d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
실제로 이런 방법은 Vuevue-validator다.js 공식 플러그인 개발 관리자를 맡고 있는 나, v2.0의 실복을 설계할 때 생기는 것이다.표의 검증 데이터는 응용 프로그램의 데이터와 현저히 다르기 때문에 사용자 측
$data
의 작용 범위를 더럽히고 싶지 않다.자신과 같은 질문이 있다면 꼭 해봐야 하나요?
Reference
이 문제에 관하여(Vue.js에서 현재 독립된 데이터 범위를 정의합니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kazupon/items/de24715e18eedb1a6e8d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)