データモニタの小さなマイクロチャネル・プログラム

/ * * 
 *提供リスナーはwatch.js 
 * / 
エクスポート機能setWatcher(ページ){ 
  ましょうデータ = ; page.data 
  LET時計 = page.watchと、
  Object.keys(時計).forEach(V => { 
    せキー = V .split( ' '); // の配列に切断するプロパティを見るために'。' 
    LET nowData =データ; // nowDataにデータを割り当てる
    ための I = 0(LET; Iはkey.lengthを< - 1; I ++ ){ // 最後のものを除いて、配列のキー要素を、反復! 
      nowData = nowData [キー[I]]; // そのキー属性を指すようにnowDataオブジェクトを
    } 
    でlastKeyを聞かせ =キー[key.length - 1 ]。
    // キー=== 'my.name' ===データnowDataは、[ 'マイ'] === data.my、lastKey === '名前'に今回想定し 
    watchFunウォッチ= [V] .handlerてみましょうを|| ; [V]鑑賞// なしのハンドラとの互換性と双方向のテープ・ハンドラを 
    聞かせてディープ・ウォッチ= [V] .deep; // 未定義に比べ、深く設定されていない場合は 
    観察(nowData、watchFun、中lastKey、深い、ページ) ; // リスニングがでlastKeyオブジェクトnowData 
  })
} 
/ * * 
 *リスナーがプロパティをリッスンし、機能を実行する
 * / 
機能観察(OBJ、キー、watchFun、深い、ページ){
   VAR valは= OBJ [キー];
   // 解析は深いですヴァル真空ではないとのtypeofヴァル===「オブジェクト」(配列値の変化はまた、深さを監視する必要があります)
  IF &&(ヴァル深い!= nullを &&typeof演算===ヴァル'オブジェクト' ){ 
    Object.keys(ヴァル).forEach(childKey => { // 下の各キーヴァルオブジェクトを介して 
      観察する(ヴァル、childKey、watchFun、ディープ、ページ); // 再帰呼び出しモニタ機能
    })
  } 
  LET = これを
  Object.definePropertyは(OBJ、キーは、{ 
    設定可能:trueに
    :列挙trueに
    SET:関数(値){ 
      watchFun.call(ページ、値、ヴァル); // 値が新しい値であります、ヴァル古い値 
      ヴァル= 値;
       IF(深い){ // ためにモニターの深さ、再びリスナーオブジェクトは、そのプロパティを監視する場合。
        (OBJ、キー、watchFun、深い、ページ)を観察します。
      } 
    }、
    得る:関数(){
       戻りヴァルと、
    } 
  })
} 
module.exportsは = { 
  setWatcher:setWatcher 
}
=必要CONSTを見る( "../../../ utilsパッケージ/ watch.js" ); 

/ * * 
   *ライフサイクル機能-ページのロードをリッスン
   * / 
  のonLoad:機能(オプション){ 
    watch.setWatcher(この) ; // リスナーを設定し、オンロードで呼び出すことが推奨される
    // のログイン削除
    .getLOginInfo(); 
  }、
  時計:{
     'prescriptionInfo.prescr_type':関数(値、OLDVALUE){
       IF(値== 0 ){
         / / にconsole.log( '処方薬'); 
        = 'prescriptionInfo.is_bottled'ペットボトル入りのlet ; 
        のlet taste_type = 'prescriptionInfo.taste_type' ;
        is_pregnantましょう = 'prescriptionInfo.is_pregnant' ; 
        is_sufferingましょう = 'prescriptionInfo.is_suffering'を
        suffering_numましょう = 'prescriptionInfo.suffering_num'をこの.setData({ 
          [ボトル] 0 
          [taste_type]: 1 
          [is_pregnant]: 0 
          [is_suffering]: 0 
          [suffering_num]: 1 
        })。
      } 
      であれば(値== 2 ){
         // はconsole.log( '膏方')。
        is_pregnant = 'prescriptionInfo.is_pregnant'をしましょう
        is_sufferingましょう = 'prescriptionInfo.is_suffering'を
        suffering_numましょう = 'prescriptionInfo.suffering_num'をこの.setData({ 
          [is_pregnant] 0 
          [is_suffering]: 0 
          [suffering_num]: 3 
        })。
      } 
    } 
  }、

 

おすすめ

転載: www.cnblogs.com/yangzhenhong/p/10955636.html