Vue cómo utilizar vm. $ Set () para resolver el problema objeto nueva propiedad no puede responder?

JavaScript está restringido moderna, Vue incapaces de detectar las propiedades de los objetos añadidos o eliminados.
Dado que el Vue se convertirá a realizar getter propiedad / setter en ejemplo de inicialización, la propiedad debe estar presente para que el sujeto de datos Vue sensible para convertirlo en a.

 

Pero ofrece Vue

 Vue.set (objeto, nombrePropiedad, valor) / vm. $ Set (objeto, nombrePropiedad, valor)

Añadir a darse cuenta de la propiedad que responde al objeto, el marco en sí cómo se va a lograrlo?

 

Vemos la correspondiente Vue Fuente:

vue / src / núcleo / instance / index.js
Exportación función SET (objetivo: Array <ANY> | Objeto, Llave: la hay, Val: la hay): el de cualquier {
   // gama de destino 
  SI (Array.isArray (objetivo) && isValidArrayIndex (Key)) {
     // la longitud de la matriz se modifica índice de evitar> longitud de los resultados de la matriz en splcie () error realiza 
    target.length = Math.max (target.length, Key)
     // utilizan el método de matriz de variante de empalme de desencadenar sensible 
    target.splice (Key ,. 1 , Val)
     de regreso Val 
  } 
  // clave ya existe, modificar directamente el valor del atributo 
  SI (Tecla de destino &&! (clave en Object.prototype)) { 
    target [Key] = Val
     retorno Val 
  } 
  Const OB = (objetivo: los hay) .__ ob__
   // propios datos sensible a la diana no se asigna directamente 
  SI (! OB) { 
    target [Key] = Val
     retorno Val 
  } 
  // atributos para un tratamiento sensible a 
  defineReactive (ob. valor, llave, Val) 
  ob.dep.notify () 
  volver Val 
}

 

 

Hemos leído el código fuente puede ser visto más arriba, vm $ conjunto para lograr el principio es:

  • Si el objetivo es una matriz, la matriz directamente empalme método de desencadenar una fórmula correspondiente ;
  • Si el objeto de destino, en primer lugar la interpretación existe propiedad, si el objeto es sensible , y en última instancia, si se quiere atribuir un manejo sensible, que es un proceso que responde llamando al método defineReactive (defineReactive es Vue cuando el objeto se inicializa con el objeto Object.defineProperty añadir dinámicamente propiedades utilizando métodos getter y setter de llamadas de función)

 

Supongo que te gusta

Origin www.cnblogs.com/Rivend/p/12630382.html
Recomendado
Clasificación