Parcourir la source

Expose $refs to data object methods

Caleb Porzio il y a 5 ans
Parent
commit
94d56ca827
8 fichiers modifiés avec 20 ajouts et 1 suppressions
  1. 0 0
      dist/alpine.js
  2. 0 0
      dist/alpine.js.map
  3. 0 0
      dist/alpine.mjs
  4. 0 0
      dist/alpine.mjs.map
  5. 0 0
      dist/alpine.umd.js
  6. 0 0
      dist/alpine.umd.js.map
  7. 2 1
      src/component.js
  8. 18 0
      test/ref.spec.js

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/alpine.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/alpine.js.map


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/alpine.mjs


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/alpine.mjs.map


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/alpine.umd.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/alpine.umd.js.map


+ 2 - 1
src/component.js

@@ -6,6 +6,8 @@ export default class Component {
 
         const rawData = saferEval(this.el.getAttribute('x-data'), {})
 
+        rawData.$refs =  this.getRefsProxy()
+
         this.data = this.wrapDataInObservable(rawData)
 
         this.initialize()
@@ -253,7 +255,6 @@ export default class Component {
     runListenerHandler(expression, e) {
         this.evaluateCommandExpression(expression, {
             '$event': e,
-            '$refs': this.getRefsProxy(),
         })
     }
 

+ 18 - 0
test/ref.spec.js

@@ -22,3 +22,21 @@ test('can reference elements from event listeners', async () => {
 
     await wait(() => { expect(document.querySelector('span').innerText).toEqual('lob') })
 })
+
+test('can reference elements from data object methods', async () => {
+    document.body.innerHTML = `
+        <div x-data="{ foo() { this.$refs.bob.innerText = 'lob' } }">
+            <span x-ref="bob"></span>
+
+            <button x-on:click="foo()"></button>
+        </div>
+    `
+
+    Alpine.start()
+
+    expect(document.querySelector('span').innerText).toEqual(undefined)
+
+    document.querySelector('button').click()
+
+    await wait(() => { expect(document.querySelector('span').innerText).toEqual('lob') })
+})

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff