Можно ли привязать поле объекта напрямую в Svelte 3? - PullRequest
0 голосов
/ 04 августа 2020

Есть ли способ привязать поле объекта в Svelte 3?

Пример:

<script>
  import MyComponent from "./MyComponent.svelte"
  let myobjectID
</script>

<MyComponent bind:myobject[id]={myobjectID}>

<!-- Where myobject == {id: "123", name: "myName", and so on...} -->

Возможно ли это?

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Нет, нет.

Если вы хотите, чтобы MyComponent работал с объектом внутри, но позволял потребителю изменять только определенную c часть этого объекта, вы могли бы выполните следующие действия:

App.svelte

<script>
  import MyComponent from "./MyComponent.svelte"
  let myobjectID
</script>

<MyComponent bind:id={myobjectID} />

MyComponent.svelte

<script>
    export let id
    $: myobject = {
        id,
        name: 'myName'
    }
</script>

Но более общий c способ, в котором вы могли бы сделать это любое свойство myobject не существует, в этом случае вам лучше не использовать объект внутри для своего компонента и просто построить как объект, когда он вам нужен.

0 голосов
/ 05 августа 2020

В svelte нет встроенного способа сделать это, но есть обходной путь:

<script>
    import MyComponent from './MyComponent.svelte';
    let myobjectID = 1;
    $: myObject = {...myObject, id: myobjectID}
</script>
<MyComponent bind:myobject={myObject} />

Решение состоит в том, чтобы создать реактивный оператор, который принимает все свойства myobject и присваивает им myObject локальная переменная в App.svelte, а затем назначить свойство id, которое затем будет привязано к myobject и изменится как myobjectID.

...