Desarrollo y aprendizaje de front-end de Vue: el principio de enlace de datos bidireccional de Vue ②

El principio de enlace bidireccional de datos Vue

Básico: broker de datos + publicar y suscribirse

  • Descripción: Al pasar un objeto JavaScript ordinario a la opción de datos de una instancia de Vue, Vue recorrerá todas las propiedades de este objeto y usará Object.defineProperty para convertir todas estas propiedades en getter / setter (secuestro de datos / mapeo de datos). Notificar cambios cuando se accede a las propiedades y se modifican. Cada instancia de componente tiene un objeto de instancia de observador correspondiente, que registrará la propiedad como una dependencia durante el proceso de representación del componente, y luego, cuando se llame al definidor de la dependencia, notificará al observador que vuelva a calcular, de modo que su componente asociado pueda ser actualizado.

Object.defineProperty (obj, prop, descriptor)

  • obj: el objeto cuyas propiedades se van a definir
  • prop: el nombre de la propiedad a definir o modificar
  • descriptor: Para definir opciones
<body>
  <div id="app">
    <div id="msg"></div>
    <input type="text" oninput="changeVal(this)">
  </div>
</body>
<script src="./node_modules/vue/dist/vue.js"></script>
<script>
  // 1.定义对象
  let userInfo = {
     
     
    name: "这个信息虽然用户看不到,但是vue可以追踪到",
  }
  // 2.数据劫持
  let obj = {
     
     }
  //要定义属性的对象,要定义或修改的属性的名称,要定义选项
  Object.defineProperty(obj, "name", {
     
     
    get() {
     
     
      return userInfo.name
    },
    set(data) {
     
     
      userInfo.name = data
      document.getElementById("msg").innerHTML = data
      return true
    }
  })
  // 3.实时渲染
  document.getElementById("msg").innerHTML = obj.name

  // 4.发布订阅
  function changeVal(eleObj) {
     
     
    let value = eleObj.value
    obj.name = value
    return true
  }

</script>

Supongo que te gusta

Origin blog.csdn.net/weixin_53985543/article/details/115010328
Recomendado
Clasificación