стройный — вызов функции из определенного компонента в серии вложенных компонентов

#javascript #svelte-3 #svelte-component

#javascript #стройный-3 #стройный-компонент

Вопрос:

У меня есть nested компонент, который я создам несколько копий в приложении:

 //App.svelte
<Nested /> // Nested-1 
<Nested /> // Nested-2
<Nested /> // Nested-3
 

у Nested меня есть экспорт функции:

 //Nested.svelte
export function doExample(){...}
 

Каков наилучший способ для меня позвонить doExample() Nested-2 ? Один из способов, о котором я могу думать, — использовать id в Nested :

 //App.svelte
<Nested id="nested_1" /> // Nested-1 
<Nested id="nested_2" /> // Nested-2
<Nested id="nested_3" /> // Nested-3
 

затем используйте getElementById() для идентификации конкретного компонента, а затем вызовите функцию. Но есть ли лучший способ добиться этого?

Ответ №1:

Вы могли бы сделать это, используя bind в экземпляре, а затем вызвать функцию в этом экземпляре

 <script>
  import Nested from './Nested.svelte'
  let child
  
  const action = () => child.doExample()
</script>

<Nested bind:this={child} />
 

Обратите внимание, что это также будет работать с массивом:

 <script>
  import Nested from './Nested.svelte'
  let children = []
  
  const action = i => children[i].doExample()
</script>

{#each array as item, i}
  <Nested bind:this={children[i]} />
{/each}