¿Es posible pasar parámetros en propiedades calculadas en Vue.Js. Puedo ver que cuando tienen getters / setter usando computed, pueden tomar un parámetro y asignarlo a una variable. como aquí de la documentación :
// ...
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]
}
}
}
// ...
¿Esto también es posible?
// ...
computed: {
fullName: function (salut) {
return salut + ' ' + this.firstName + ' ' + this.lastName
}
}
// ...
Donde la propiedad calculada toma un argumento y devuelve la salida deseada. Sin embargo, cuando intento esto, recibo este error:
vue.common.js: 2250 Tipo de error no capturado: fullName no es una función (...)
¿Debo usar métodos para tales casos?
javascript
vue.js
vuejs2
Saurabh
fuente
fuente
Respuestas:
Lo más probable es que quieras usar un método
Explicación más larga
Técnicamente, puede usar una propiedad calculada con un parámetro como este:
(Gracias
Unirgy
por el código base para esto).La diferencia entre una propiedad calculada y un método es que las propiedades calculadas se almacenan en caché y cambian solo cuando cambian sus dependencias. Un método evaluará cada vez que se llame .
Si necesita parámetros, generalmente no hay beneficios de usar una función de propiedad calculada sobre un método en tal caso. Aunque le permite tener la función getter parametrizada vinculada a la instancia de Vue, pierde el almacenamiento en caché, por lo que no hay ninguna ganancia allí, de hecho, puede romper la reactividad (AFAIU). Puede leer más sobre esto en la documentación de Vue https://vuejs.org/v2/guide/computed.html#Computed-Caching-vs-Methods
La única situación útil es cuando tienes que usar un getter y necesitas tenerlo parametrizado. Esta situación ocurre, por ejemplo, en Vuex . en Vuex es la única forma de obtener sincrónicamente resultados parametrizados de la tienda (las acciones son asíncronas). Por lo tanto, este enfoque figura en la documentación oficial de Vuex para sus captadores https://vuex.vuejs.org/guide/getters.html#method-style-access
fuente
<span v-text="fullName('Hi')"></span>
lugar, también funciona.<span :text="message"></span>
, ya no funciona para Vue 2.0, uno tiene que usar en su lugar:<span v-text="message"></span>
o<span>{{ message }}</span>
como se muestra en este codepen: codepen.io/Ismael-VC/pen/dzGzJaPuede usar métodos, pero prefiero seguir usando propiedades calculadas en lugar de métodos, si no están mutando datos o no tienen efectos externos.
Puede pasar argumentos a propiedades calculadas de esta manera (no documentado, pero sugerido por los mantenedores, no recuerdo dónde):
EDITAR: no utilice esta solución, solo complica el código sin ningún beneficio.
fuente
Bueno, técnicamente hablando podemos pasar un parámetro a una función calculada, de la misma manera que podemos pasar un parámetro a una función getter en vuex. Tal función es una función que devuelve una función.
Por ejemplo, en los captadores de una tienda:
Este captador se puede asignar a las funciones calculadas de un componente:
Y podemos usar esta función calculada en nuestra plantilla de la siguiente manera:
Podemos aplicar el mismo enfoque para crear un método calculado que tome un parámetro.
Y úsalo en nuestra plantilla:
Dicho esto, no digo aquí que sea la forma correcta de hacer las cosas con Vue.
Sin embargo, pude observar que cuando el elemento con el ID especificado se muta en la tienda, la vista actualiza su contenido automáticamente con las nuevas propiedades de este elemento (el enlace parece estar funcionando bien).
fuente
Los filtros son una funcionalidad proporcionada por los componentes Vue que le permiten aplicar formato y transformaciones a cualquier parte de los datos dinámicos de su plantilla.
No cambian los datos de un componente ni nada, pero solo afectan la salida.
Digamos que está imprimiendo un nombre:
Observe la sintaxis para aplicar un filtro, que es | filterName. Si está familiarizado con Unix, ese es el operador de tubería Unix, que se utiliza para pasar la salida de una operación como entrada a la siguiente.
La propiedad de filtros del componente es un objeto. Un filtro único es una función que acepta un valor y devuelve otro valor.
El valor devuelto es el que se imprime realmente en la plantilla Vue.js.
fuente
También puede pasar argumentos a los captadores devolviendo una función. Esto es particularmente útil cuando desea consultar una matriz en la tienda:
Tenga en cuenta que los captadores a los que se accede mediante métodos se ejecutarán cada vez que los llame, y el resultado no se almacena en caché.
Eso se llama Método-Estilo de acceso y se documenta en la documentación Vue.js .
fuente
Sin embargo, hay casos en los que necesita hacerlo. Le mostraré un ejemplo simple de pasar el valor a la propiedad calculada usando getter y setter.
Y el guión
Cuando se hace clic en el botón, pasamos a la propiedad calculada el nombre 'Roland' y en
set()
estamos cambiando el nombre de 'John Doe' a 'Roland'.A continuación hay un caso de uso común cuando se calcula con getter y setter. Digamos que tiene la siguiente tienda vuex:
Y en su componente desea agregar
v-model
a una entrada pero usando la tienda vuex.fuente
¡No estoy completamente seguro de lo que estás tratando de lograr, pero parece que estarás perfectamente bien usando el método en lugar de calcularlo!
fuente
cuando quieras usar
fuente
Computado podría considerarse tiene una función. Entonces, para un ejemplo de valdiación, claramente podría hacer algo como:
Que usarás como:
Solo tenga en cuenta que aún extrañará el almacenamiento en caché específico de lo calculado.
fuente
Sí, existen métodos para usar params. Al igual que las respuestas indicadas anteriormente, en su ejemplo es mejor usar métodos ya que la ejecución es muy ligera.
Solo como referencia, en una situación en la que el método es complejo y el costo es alto, puede almacenar en caché los resultados de la siguiente manera:
nota: Al usar esto, tenga cuidado con la memoria si se trata de miles
fuente