開発に Vue を使用する場合、次のような状況に遭遇することがあります。Vue インスタンスを生成した後、データを再度割り当てると、ビューに自動的に更新されないことがあります。Vue ドキュメントを確認すると、次のような文が見つかります。「インスタンスの作成後にインスタンスに新しいプロパティを追加しても、ビューの更新はトリガーされません。」 次のコードは学生オブジェクトに年齢属性を追加します。 データ () { 戻る { 学生: 名前: ''、 性別: '' } } } マウント済み () { //——インスタンスがマウントされた後のフック関数 this.student.age = 24 } ES5 の制限により、Vue.js はオブジェクト プロパティの追加または削除を検出できません。 Vue.js はインスタンスを初期化するときにプロパティをゲッター/セッターに変換するため、Vue.js がプロパティを変換してレスポンシブにするには、プロパティがデータ オブジェクト上に存在している必要があります。 正しい書き方: this.$set(this.data,"key",value') マウントされた(){ this.$set(this.student,"年齢", 24) } :: Vue では、ルートレベルのレスポンシブ プロパティを動的に追加することはできません。 例えば: constアプリ = 新しいVue({ データ: { 1: 1 } // レンダリング: h => h(Suduko) }).$mount('#app1') Vue.set(app.data, 'b', 2) ネストされたオブジェクトにレスポンシブプロパティを追加するには、Vue.set(object, propertyName, value) メソッドのみを使用できます。たとえば、 var vm = 新しい Vue({ el:'#テスト', データ:{ //情報ルート属性はデータ内に既に存在します:{ 名前:'シャオミン'; } } }); //情報に性別属性を追加します Vue.set(vm.info,'sex','男'); Vue.set() と this.$set() の実装原則 まず、Vue.set() のソースコードを見てみましょう。 '../observer/index' から {set} をインポートします ... Vue.set = 設定 ... this.$set() のソースコードを見てみましょう: '../observer/index' から {set} をインポートします ... Vue.prototype.$set = 設定 ... その結果、Vue.set() と this.$set() という 2 つの API の実装原理は基本的に同じであり、どちらも set 関数を使用していることがわかりました。 set 関数は、../observer/index ファイルからエクスポートされます。違いは、Vue.set() は set 関数を Vue コンストラクターにバインドするのに対し、this.$set() は set 関数を Vue プロトタイプにバインドすることです。 関数セット (ターゲット: 配列<any> | オブジェクト、キー: any、値: any): any { (process.env.NODE_ENV !== 'production' && の場合 (isUndef(ターゲット) || isPrimitive(ターゲット)) ){ 警告(`未定義、null、またはプリミティブ値にリアクティブ プロパティを設定できません: ${(target: any)}`) } Array.isArray(ターゲット) && isValidArrayIndex(キー) の場合 { ターゲットの長さ = Math.max(ターゲットの長さ、キー) ターゲット.splice(キー、1、値) 戻り値 } if (ターゲットのキー && !(Object.prototype のキー)) { ターゲット[キー] = 値 戻り値 } const ob = (ターゲット: 任意).__ob__ target._isVue の場合、ob と ob.vmCount は次のように記述します。 process.env.NODE_ENV !== 'production' && 警告( 'Vue インスタンスまたはそのルート $data にリアクティブ プロパティを追加しないでください ' + 「実行時 - データ オプションで事前に宣言します。」 ) 戻り値 } もし (!ob) { ターゲット[キー] = 値 戻り値 } defineReactive(ob.value, key, val) ob.dep.notify() 戻り値 } set 関数は、target、key、val の 3 つのパラメーターを受け取り、target の値は配列またはオブジェクトであり、公式 Web サイトで指定されている Vue.set() メソッドを呼び出すときに渡されるパラメーターと正確に一致することがわかりました。 参照: Vue で遭遇する落とし穴 --- 変更検出の問題 (配列関連) これで、Vue.set() と this.$set() の使い方と違いについての記事は終了です。Vue.set() と this.$set() に関するその他の関連コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: MySQL 8.0 バージョンで getTables がすべてのデータベース テーブルを返す問題の簡単な分析
>>: LDAP ユーザー認証を使用するように Linux を構成する方法
1. maxPostSize を設定する理由は何ですか? tomcat コンテナには送信データのサイ...
序文mysql がデフォルトのデータベース パスを変更したため、サービスを開始できませんでした。ログ...
目次序文プロミスチェーンMDN エラー連鎖デフォルト処理略語非同期待機序文この記事を書いた理由は、ユ...
1. 現在のホスト名を表示する [root@fangjian ~]# ホスト名ctl 静的ホスト名:...
コードが失われ、コンテナ内で実行されているイメージから必要なコードを回復する必要がある場合があります...
Docker コンテナは互いに分離されており、相互にアクセスできないことは誰もが知っていますが、依存...
JBoss は Tomcat を Web コンテナとして使用するため、JBoss の Web コンテ...
1. <body background=画像ファイル名 bgcolor=color text=...
目次1. はじめに2. ユーザーテーブルを準備する2.1 グループ化ルール2.2 グループの使用2....
目次MySQLデータベースの名前を変更する方法最初の方法: データベースの名前を変更することは非推奨...
#!/bin/bash #SVNをダウンロード yum -y サブバージョンをインストールします ...
この記事では、MySQL 8.0.16 winx64.zipのインストールと設定方法の具体的なコード...
テーブル構造を編集するための MySQL の alter コマンドの使用。具体的な内容は以下のとおり...
スワップを無効にするサーバーがデータベース サービスまたはメッセージ ミドルウェア サービスを実行し...
1. Dockerサーバーへのリモートアクセスを有効にするdocker が配置されているリモート サ...