0

ngIfDOM要素にディレクティブを適用したいのですが、これngIfは関数を監視し、その関数は他の変数の値をチェックします。次のように:

    export class Controller{

    private x: ObjectClass;

        public isDone():boolean{
         return this.x.isY() && this.otherFunction();
        }

        private otherFunction():boolean{
        let result:boolean = true;
        this.array.forEach((value)=>{
        if(!value){
        result = false;}
        });
        return result
        }
    }

//define the state 

  .state('app.first-state', {
        url: '/first-state,
        views: {
          'renderView': {
            template: require('./states/first-state.html'),
            controller: 'Controller as Ctrl',
          }
        }
      })

//in the first-state.html

    <div ng-if="Ctrl.isDone()"></div>

xメソッドと変数を運ぶオブジェクトです。

x.isY()およびそのthis.otherFunction()戻り値をに変更しますtrueが、ngIf は DOM 要素を再作成しません。ダイジェスト サイクルはxオブジェクトもarrayオブジェクトも監視していないようです。DOM要素に直接使用していないので、これは理にかなっています. ただし、メソッドisDone()は、状態に入ったとき、または状態から抜けたときにのみ実行されます。

次の回避策を実行しましたが、パフォーマンスの問題が懸念されます。

    private isDoneVar:boolean = false;

    //then make my "own digest cycle"
     $interval(() => {
                this.isDoneVar = this.isDone();
            }, 700);
//and in the div
        <div ng-if="Ctrl.isDoneVar"></div>

2 つの質問があります。

  1. isDone状態に入るときと状態から出るときに関数が実行されるのはなぜですか?
  2. ダイジェスト サイクルの実行ごとにこの関数を実行するように angular に指示するより良い方法はありますか? または、内部変数の変更を監視するには($watch各変数に追加せずに)
4

0 に答える 0