Vue.Js의 계산 속성에서 매개 변수를 전달할 수 있습니다. 계산 된 것을 사용하여 getter / setter가있을 때 매개 변수를 가져 와서 변수에 할당 할 수 있습니다. 문서 에서 여기처럼 :
// ...
computed: {
fullName: {
// getter
get: function () {
return this.firstName + ' ' + this.lastName
},
// setter
set: function (newValue) {
var names = newValue.split(' ')
this.firstName = names[0]
this.lastName = names[names.length - 1]
}
}
}
// ...
이것도 가능합니까?
// ...
computed: {
fullName: function (salut) {
return salut + ' ' + this.firstName + ' ' + this.lastName
}
}
// ...
계산 된 속성은 인수를 사용하여 원하는 출력을 반환합니다. 그러나 이것을 시도하면이 오류가 발생합니다.
vue.common.js : 2250 Uncaught TypeError : fullName은 함수가 아닙니다 (…)
그러한 경우에 방법을 사용해야합니까?
답변
아마도 방법을 사용하고 싶을 것입니다.
<span>{{ fullName('Hi') }}</span>
methods: {
fullName(salut) {
return `${salut} ${this.firstName} ${this.lastName}`
}
}
더 긴 설명
기술적으로 다음과 같은 매개 변수와 함께 계산 된 특성을 사용할 수 있습니다.
computed: {
fullName() {
return salut => `${salut} ${this.firstName} ${this.lastName}`
}
}
(이에 Unirgy
대한 기본 코드를 주셔서 감사 합니다.)
계산 된 속성과 메서드의 차이점은 계산 된 속성이 캐시 되고 종속성이 변경 될 때만 변경 된다는 것입니다. 방법은이 호출 할 때마다 평가합니다 .
매개 변수가 필요한 경우 일반적으로 이러한 경우 메서드보다 계산 된 속성 함수를 사용하면 이점이 없습니다. Vue 인스턴스에 바인딩 된 getter 함수를 매개 변수화 할 수는 있지만 캐싱을 잃어 실제로 아무런 이득을 얻지 못하므로 실제로는 반응성을 깰 수 있습니다 (AFAIU). Vue 문서 https://vuejs.org/v2/guide/computed.html#Computed-Caching-vs-Methods 에서 이에 대한 자세한 내용을 볼 수 있습니다.
유용한 상황은 게터 를 사용해야하고 매개 변수화해야하는 경우입니다. 이 상황은 예를 들어 Vuex 에서 발생 합니다. Vuex에서는 상점에서 매개 변수화 된 결과를 동 기적으로 얻을 수있는 유일한 방법입니다 (동작은 비동기 임). 따라서이 방법은 공식 Vuex 설명서에 나와 있으며 getter
https://vuex.vuejs.org/guide/getters.html#method-style-access
답변
메서드를 사용할 수 있지만 데이터를 변경하지 않거나 외부 효과가없는 경우 메서드 대신 계산 된 속성을 사용하는 것이 좋습니다.
이 방법으로 계산 된 속성에 인수를 전달할 수 있습니다 (문서화되어 있지 않지만 관리자가 제안한 위치는 기억하지 않습니다).
computed: {
fullName: function () {
var vm = this;
return function (salut) {
return salut + ' ' + vm.firstName + ' ' + vm.lastName;
};
}
}
편집 :이 솔루션을 사용하지 마십시오, 그것은 아무런 이점없이 코드를 복잡하게합니다.
답변
기술적으로 말하자면 vuex에서 매개 변수를 getter 함수에 전달할 수있는 것과 같은 방법으로 매개 변수를 계산 함수에 전달할 수 있습니다. 이러한 함수는 함수를 반환하는 함수입니다.
예를 들어, 상점 게터에서 :
{
itemById: function(state) {
return (id) => state.itemPool[id];
}
}
이 게터는 컴포넌트의 계산 된 함수에 매핑 될 수 있습니다 :
computed: {
...mapGetters([
'ids',
'itemById'
])
}
템플릿에서이 계산 된 함수를 다음과 같이 사용할 수 있습니다.
<div v-for="id in ids" :key="id">{{itemById(id).description}}</div>
동일한 접근 방식을 적용하여 매개 변수를 사용하는 계산 된 메서드를 만들 수 있습니다.
computed: {
...mapGetters([
'ids',
'itemById'
]),
descriptionById: function() {
return (id) => this.itemById(id).description;
}
}
템플릿에서 사용하십시오.
<div v-for="id in ids" :key="id">{{descriptionById(id)}}</div>
나는 이것이 Vue로 일을하는 올바른 방법이라고 말하는 것이 아닙니다.
그러나 지정된 ID를 가진 항목이 상점에서 변경되면보기 가이 항목의 새로운 속성으로 내용을 자동으로 새로 고칩니다 (바인딩은 제대로 작동하는 것 같습니다).
답변
필터 는 Vue 구성 요소에서 제공하는 기능으로 템플릿 동적 데이터의 모든 부분에 서식 및 변환을 적용 할 수 있습니다.
구성 요소의 데이터 또는 아무것도 변경하지 않지만 출력에만 영향을 미칩니다.
이름을 인쇄한다고 가정 해보십시오.
new Vue({
el: '#container',
data() {
return {
name: 'Maria',
lastname: 'Silva'
}
},
filters: {
prepend: (name, lastname, prefix) => {
return `${prefix} ${name} ${lastname}`
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="container">
<p>{{ name, lastname | prepend('Hello') }}!</p>
</div>
필터를 적용하는 구문에 주목하십시오. filterName. 유닉스에 익숙하다면, 그것은 유닉스 파이프 연산자입니다. 이것은 오퍼레이션의 출력을 다음 입력으로 전달하는 데 사용됩니다.
구성 요소의 filters 속성은 객체입니다. 단일 필터는 값을 받아들이고 다른 값을 반환하는 함수입니다.
반환 된 값은 실제로 Vue.js 템플릿에 인쇄 된 값입니다.
답변
함수를 반환하여 getter에 인수를 전달할 수도 있습니다. 이것은 상점에서 배열을 조회 할 때 특히 유용합니다.
getters: {
// ...
getTodoById: (state) => (id) => {
return state.todos.find(todo => todo.id === id)
}
}
store.getters.getTodoById(2) // -> { id: 2, text: '...', done: false }
메소드를 통해 액세스 된 getter는 호출 할 때마다 실행되며 결과는 캐시되지 않습니다.
이를 Method-Style Access라고 하며 Vue.js docs에 문서화되어 있습니다.
답변
매개 변수를 전달할 수 있지만 vue.js 방식이 아니거나 수행 방식이 잘못되었습니다.
하지만 getter와 setter를 사용하여 계산 된 속성에 값을 전달하는 간단한 예제를 보여 드리겠습니다.
<template>
<div>
Your name is {{get_name}} <!-- John Doe at the beginning -->
<button @click="name = 'Roland'">Change it</button>
</div>
</template>
그리고 대본
export default {
data: () => ({
name: 'John Doe'
}),
computed:{
get_name: {
get () {
return this.name
},
set (new_name) {
this.name = new_name
}
},
}
}
버튼을 클릭하면 계산 된 속성 이름 인 ‘Roland’로 전달되고 set()
이름은 ‘John Doe’에서 ‘Roland’로 변경됩니다.
아래에는 계산이 getter 및 setter와 함께 사용되는 일반적인 사용 사례가 있습니다. 다음과 같은 vuex 상점이 있다고 가정하십시오.
export default new Vuex.Store({
state: {
name: 'John Doe'
},
getters: {
get_name: state => state.name
},
mutations: {
set_name: (state, payload) => state.name = payload
},
})
그리고 구성 요소 v-model
에서 vuex 저장소를 사용하여 입력 에 추가 하려고합니다.
<template>
<div>
<input type="text" v-model="get_name">
{{get_name}}
</div>
</template>
<script>
export default {
computed:{
get_name: {
get () {
return this.$store.getters.get_name
},
set (new_name) {
this.$store.commit('set_name', new_name)
}
},
}
}
</script>
답변
나는 당신이 성취하려고하는 것을 완전히 확신하지 못하지만 계산 대신 방법을 사용하여 완벽하게 괜찮을 것 같습니다!