vueオブジェクトのプロパティ値を変更した後、ページが問題を再レンダリングしない

4208 ワード

解決策
  • 用$.set
  • 用Object.assign

  • vue双方向バインド原理
    Vueはデータハイジャックとパブリッシャー-サブスクライバモードを結合する方法を採用し、Objectを通過する.defineProperty()は,各属性のsetter,getter属性をハイジャックし,データが変動するとサブスクライバに通知し,コールバック関数の更新をトリガーし,ビューを再レンダリングする.
    vueデータ
    vueのdataで定義されたデータには、getterとsetterが付与されています.オブジェクトに新しい属性を追加する場合、または他の場所で直接thisします.出てくる変数は、getterとsetter属性がありません.
    (通常のJavaScriptオブジェクトをdataオプションとしてVueインスタンスに転送すると、Vueはこのオブジェクトのすべてのプロパティを巡回し、Object.definePropertyを使用してこれらのプロパティをすべてgetter/setterに変換します.現代のJavaScriptの制限(およびObject.observeの廃棄)を受けて、Vueはオブジェクトプロパティの追加または削除を検出できません.Vueはインスタンスの初期化時に属性に対してgetter/setter変換プロセスを実行するため、Vueを変換するには、属性がdataオブジェクト上に存在する必要があります.これにより、応答することができます.)
    解決策
    <div>{{data.a}}{{data.b}}{{data.c}}</div>
    export default {
      name: "addEdit",
      data() {
        return {
          data: {
          	a: 1
          }
        }
      },
      mounted(){
      	this.data = Object.assign({},this.data,{ b: '   '});
    	
    	//         ,      ,  render        
    	this.$forceUpdate();
      	this.$set(this.data,'c','   ');
      }
    }