配列のオブジェクトプロパティを変更しましたが、ページでは変更していません

フリーウィンド

vue + typescriptを使用して簡単なデモを作成するときに問題が発生します。

コードビュー

<template>
    <div class="hello">
        <ul>
            <li v-for="user in users" v-on:click="clickUser(user)" class="user">
                {{user}}
            </li>
        </ul>
    </div>
</template>

<script lang="ts">
    import {Component, Prop, Vue} from 'vue-property-decorator';

    type User = {
        name: string,
        clicked?: boolean
    }

    @Component
    export default class HelloWorld extends Vue {
        @Prop() private users: Array<User> = [{name: "Mike"}, {name: "Ann"}];

        clickUser(user: User) {
            user.clicked = true
            alert("clicked on " + user.name + ": " + user.clicked)
        }
    }
</script>

それらはページに表示されます:

* { "name": "Mike" }
* { "name": "Ann" }

アンをクリックすると、次のように警告されます。

clicked on Ann: true

しかし、ページ上では何も変更されていません。* { "name": "Ann" }* { "name": "Ann", "clicked": true }

それを修正する方法は?

このための完全な小さなデモ:https//github.com/freewind-demos/vue-modify-array-object-demo

書面で

ここでの問題は、新しいキーと値のペアをリアクティブオブジェクトに追加している間、Vueがリアクティブオブジェクトに追加されている新しいプロパティを検出できないため、ペア自体がリアクティブではないことです。Vue.set(target,key,value)ここでメソッドを使用する必要があります。したがって、以下のようにメソッドのuser.clicked割り当てを変更しますclickUser()それは魔法のように働き始めるはずです!

    clickUser(user: User) {
        Vue.set(user,'clicked',true)
        alert("clicked on " + user.name + ": " + user.clicked)
    }

詳細はこちらhttps://vuejs.org/v2/api/#Vue-set&こちらhttps://vuejs.org/v2/guide/reactivity.html

これは、ユーザーを変更する代わりに、まったく新しいユーザーを追加する場合に機能するため、直感に反する場合がありますthis.users.push({"name":"John"})ただし、一方を使用すると新しいリアクティブオブジェクトを作成し、もう一方を使用すると既存のオブジェクトを変更します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

JavascriptforEach配列メソッドはオブジェクトのプロパティを変更しません

分類Dev

クラスプロパティ内のオブジェクト内のvuev2値は変更されましたが、変更されていません

分類Dev

$ watchは、Angularの新しいアイテムのオブジェクトの配列でプロパティの変更を見つけられません

分類Dev

Htmlテンプレートにプロパティを追加すると、「オブジェクトではプロパティの追加または変更が許可されていません」というエラーが発生します。

分類Dev

変更がないか、オブジェクトの配列のプロパティを観察します

分類Dev

オブジェクトを含む配列では、1つのアイテムのプロパティを変更しても、オブジェクト自体は変更されません。

分類Dev

localStorageから取得したオブジェクトのプロパティを変更できません

分類Dev

ramdaを使用して配列内のオブジェクトプロパティを変更します

分類Dev

OfTypeを使用したforeachは、オブジェクトプロパティを変更しません

分類Dev

OfTypeを使用したforeachは、オブジェクトプロパティを変更しません

分類Dev

プロパティオブジェクトの変更はプロパティに影響しません

分類Dev

元の配列を変更せずに、配列内のオブジェクトプロパティを変更します

分類Dev

EF:オブジェクト更新プロセスは1つのプロパティの値を変更していません

分類Dev

オブジェクト自体を変更せずに、オブジェクトの配列プロパティをフィルタリングします

分類Dev

配列のシーケンシャル値を持つプロパティを追加して、配列オブジェクトを変更します

分類Dev

配列のようなオブジェクトプロパティを配列に変換することが機能していません

分類Dev

MultiBindingでプロパティを変更しても、実際のオブジェクトには影響しません

分類Dev

配列オブジェクトのプロパティを変更する方法をフックします。

分類Dev

オブジェクトのプロパティを変更し、反応性を維持しようとしています。プロパティまたはメソッド「vm」はインスタンスで定義されていませんが、レンダリング中に参照されます

分類Dev

プロジェクト内のEveyユーザーフォームのStartUpPositionを変更してくださいエラー:オブジェクトはプロパティをサポートしていません

分類Dev

Javaでストリーミングした後、オブジェクトプロパティの変更は保存されません

分類Dev

配列内のオブジェクトプロパティ名の値を変更します

分類Dev

既存のオブジェクトの場合、他のオブジェクトを変更せずに新しく作成されたオブジェクトを追加します。ここでは、他のプロパティを失います。

分類Dev

新しい着信オブジェクトから変更されていない元のオブジェクトのプロパティを保持するオブジェクトの配列からマージされたオブジェクトを作成するにはどうすればよいですか?

分類Dev

[すべてチェック]チェックボックスは、オブジェクトのプロパティを選択から変更しません

分類Dev

アンダースコアを使用して、配列内のオブジェクトの1つのプロパティを変更します

分類Dev

オブジェクトの配列を反復処理し、各オブジェクトの1つのプロパティを変更します

分類Dev

プロジェクトのプロパティを変更しても、VisualStudioは気づきません

分類Dev

配列リストjqueryを繰り返し処理してから、オブジェクトのプロパティにいくつかの変更を加えます。変更後に新しい配列リストを作成します。

Related 関連記事

  1. 1

    JavascriptforEach配列メソッドはオブジェクトのプロパティを変更しません

  2. 2

    クラスプロパティ内のオブジェクト内のvuev2値は変更されましたが、変更されていません

  3. 3

    $ watchは、Angularの新しいアイテムのオブジェクトの配列でプロパティの変更を見つけられません

  4. 4

    Htmlテンプレートにプロパティを追加すると、「オブジェクトではプロパティの追加または変更が許可されていません」というエラーが発生します。

  5. 5

    変更がないか、オブジェクトの配列のプロパティを観察します

  6. 6

    オブジェクトを含む配列では、1つのアイテムのプロパティを変更しても、オブジェクト自体は変更されません。

  7. 7

    localStorageから取得したオブジェクトのプロパティを変更できません

  8. 8

    ramdaを使用して配列内のオブジェクトプロパティを変更します

  9. 9

    OfTypeを使用したforeachは、オブジェクトプロパティを変更しません

  10. 10

    OfTypeを使用したforeachは、オブジェクトプロパティを変更しません

  11. 11

    プロパティオブジェクトの変更はプロパティに影響しません

  12. 12

    元の配列を変更せずに、配列内のオブジェクトプロパティを変更します

  13. 13

    EF:オブジェクト更新プロセスは1つのプロパティの値を変更していません

  14. 14

    オブジェクト自体を変更せずに、オブジェクトの配列プロパティをフィルタリングします

  15. 15

    配列のシーケンシャル値を持つプロパティを追加して、配列オブジェクトを変更します

  16. 16

    配列のようなオブジェクトプロパティを配列に変換することが機能していません

  17. 17

    MultiBindingでプロパティを変更しても、実際のオブジェクトには影響しません

  18. 18

    配列オブジェクトのプロパティを変更する方法をフックします。

  19. 19

    オブジェクトのプロパティを変更し、反応性を維持しようとしています。プロパティまたはメソッド「vm」はインスタンスで定義されていませんが、レンダリング中に参照されます

  20. 20

    プロジェクト内のEveyユーザーフォームのStartUpPositionを変更してくださいエラー:オブジェクトはプロパティをサポートしていません

  21. 21

    Javaでストリーミングした後、オブジェクトプロパティの変更は保存されません

  22. 22

    配列内のオブジェクトプロパティ名の値を変更します

  23. 23

    既存のオブジェクトの場合、他のオブジェクトを変更せずに新しく作成されたオブジェクトを追加します。ここでは、他のプロパティを失います。

  24. 24

    新しい着信オブジェクトから変更されていない元のオブジェクトのプロパティを保持するオブジェクトの配列からマージされたオブジェクトを作成するにはどうすればよいですか?

  25. 25

    [すべてチェック]チェックボックスは、オブジェクトのプロパティを選択から変更しません

  26. 26

    アンダースコアを使用して、配列内のオブジェクトの1つのプロパティを変更します

  27. 27

    オブジェクトの配列を反復処理し、各オブジェクトの1つのプロパティを変更します

  28. 28

    プロジェクトのプロパティを変更しても、VisualStudioは気づきません

  29. 29

    配列リストjqueryを繰り返し処理してから、オブジェクトのプロパティにいくつかの変更を加えます。変更後に新しい配列リストを作成します。

ホットタグ

アーカイブ