vue 구성 요소 데이터 내의 어레이를 업데이트하는 중
컴포넌트 데이터 내에 null로 초기화되거나 문자열이 포함되어 있는 키가 있습니다.원하는 수만큼 관련 키를 만들 수 있고 null 또는 여러 값을 사용하여 초기화할 수도 있습니다.새로운 입력 필드를 추가하기 위해 버튼을 누를 때마다 페이지가 다시 렌더링되고 데이터가 다시 초기화되는 문제가 발생합니다.
이 문서를 보고 있는데 addKeys 함수 내에 디버거를 배치하면 오류 메시지가 나타납니다.this.licence.associatedKeys.$set is not a function
이 에러는 이해할 수 없습니다.또, 관련지어져 있는 키 배열에 요소를 추가하는 방법을 알 수 없습니다.
<template>
<div>
<form>
<label>Associated Keys</label>
<button v-on:click="addNewKey">Add new key</button>
<div v-for="(k,index) in licence.associatedKeys" :key="k">
<input type="text" :value="k" @input="licence.associatedKeys[index]=$event.target.value">
</div>
</form>
</div>
</template>
<script>
import util from '~/assets/js/util'
export default {
methods: {
addNewKey() {
this.licence.associatedKeys.$set(this.licence.associatedKeys, null)
}
},
data: () => ({
licence: {
associatedKeys: []
}
})
}
</script>
리디렉션되는 이유는 양식 안에 버튼이 있기 때문입니다.다른 브라우저에서는 그렇지 않지만 Chrome에서는 기본적으로 리디렉션으로 처리됩니다.이 문제를 해결하는 가장 쉬운 방법은 액션을 정의하는 것입니다.action="#"
이렇게 하면 기본 작업을 방지하기 위해 모든 버튼을 처리할 필요가 없습니다.
@input
괜찮지만 vue에는 다음과 같은 기능이 내장되어 있습니다.v-model
값을 자동으로 바인드하여 변경 시 표시 및 업데이트합니다.
사용할 필요가 없습니다.$set
푸시할 때(및 vue 인스턴스로 설정하고 값을 설정하지 않음)this.$set(this.myVal, 'myKey', null)
대신this.myVal.myKey.$set(null)
)
마지막으로 키와 값의 쌍을 배열에 저장하려면 키와 값의 두 개체가 필요합니다.
new Vue({
el: "#app",
methods: {
addNewKey() {
//this.licence.associatedKeys.$set(this.licence.associatedKeys, null)
this.licence.associatedKeys.push({key:null, val:null});
}
},
data: () => ({
licence: {
associatedKeys: []
}
})
})
body {background: #20262E;padding: 20px;font-family: Helvetica;}
button {padding: 8px 16px;border-radius: 20px;border: none;}
#app {background: #fff;border-radius: 4px;padding: 20px;transition: all 0.2s;}
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.min.js"></script>
<div id="app">
<div>
<form action="#">
<label>Associated Keys</label>
<button v-on:click="addNewKey">Add new key</button>
<div v-for="(k,index) in licence.associatedKeys" :key="k">
<input type="text" v-model="k.key">
<input type="text" v-model="k.val">
</div>
</form>
</div>
<pre>{{this.licence}}</pre>
</div>
<!-- the submit event will no longer reload the page -->
<form v-on:submit.prevent="onSubmit"></form>
페이지 새로고침을 멈추려면 이게 필요한 것 같아요.
정의되지 않은 오류에 대해서는 인스턴스 자체를 사용해 볼 수 있습니다.
this.$set('license.associatedKeys[' + this.license.associatedKeys.length + ']', null);
또, 문서를 잘못 읽었을 가능성이 있습니다..$set
보증 상태.$add
중첩된 데이터 속성에 대한 메서드는 key 및 value 인수를 사용합니다.그래서, 당신은 글을 썼어야 했다.
this.licence.associatedKeys.$set(this.licence.associatedKeys.length, null)
언급URL : https://stackoverflow.com/questions/52297931/updating-array-inside-vue-components-data
'programing' 카테고리의 다른 글
C의 플래그를 삭제하려면 어떻게 해야 하나요? (0) | 2022.05.30 |
---|---|
AM/PM과 함께 현재 시간을 12시간 형식으로 표시 (0) | 2022.05.30 |
Null 포인터에 주소 0이 사용되는 이유는 무엇입니까? (0) | 2022.05.30 |
Vuex 돌연변이 및 작업이 작동하지 않음 (0) | 2022.05.30 |
리소스 사용 블록에서 여러 개의 연결된 리소스를 관리하기 위한 올바른 관용구입니까? (0) | 2022.05.30 |