javascript - Alpinejs : change values inside children from parent element

标签 javascript alpine.js

我有一些 alpinejs 的嵌套自定义选择菜单:

<template x-for="(attribute, rootindex) in attributes">
    <div x-ref="attribute.name"
     x-data="{open: false, selectedIndex: false, activeIndex: null, selectedItem:false, items:[...], placeholder:'Choose '+attribute.label }"
     class="my-5">
     ...

您可以看到每个子项都有自己的状态/变量,例如 open、selectedIndex、selectedItem,... 在某些情况下我想设置其中一些状态:

我尝试在 child 身上使用外部引用,但它不起作用,并且会返回未定义! 该函数位于父级:

    deleteAttribute(index) {
      for (let i = index; i < this.attributes.length; i++) {
        delete this.selected[this.attributes[i].name];
        this.$refs[this.attributes[i].name].selectedItem = false;
      }

您能告诉我如何访问子状态吗? 例如,我想在特定子项中将某些“selectedItem”设置为 false

提前非常感谢

最佳答案

您可以使用 Alpine.$data(element) api

<head>
  <script src="https://unpkg.com/alpinejs" defer></script>
  <script>
    let data = {
      attrs: [{
          key: 'no1',
          name: 'first'
        },
        {
          key: 'no2',
          name: 'second'
        },
        {
          key: 'no3',
          name: 'third'
        }
      ],
      toggle(index) {
        let el = document.getElementById(`child-${index}`)
        let data = Alpine.$data(el)
        data.selected = !data.selected
      }
    }
  </script>
</head>

<body x-data="data">
  <template x-for="(attr, index) of attrs">
    <div x-data="{selected: false}">
      <p :id='`child-${index}`' x-text="attr.name + (selected ? '[x]' : '[-]')"></p><button @click="toggle(index)">Toggle </button>
    </div>
  </template>
</body>

关于javascript - Alpinejs : change values inside children from parent element,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73899144/

相关文章:

javascript - 在输入上创建多个字段

Javascript:何时在构造函数中定义函数以及何时使用原型(prototype)?

javascript - Alpine 嵌套 x 数据

javascript - 滚动到页面顶部 - livewire 组件 - alpine js

javascript - Dc.js 传单标记弹出窗口显示来自输入数据的字段

javascript - HTML 表格标题中的垂直(旋转)文本

javascript - jQuery 读取数据对象并等待 $.each 完成

alpine.js - 识别 alpine.js for 循环中的最后一项

laravel - 在 Alpine x-data 指令中使用 Laravel 数组数据

javascript - 变量更新时 x-text 不起作用