0

以下を考えると:

<div data-ng-repeat="val in vals">
      <div data-ng-class:{'myClass':isEngineOn(val)}>
          <span data-ng-show="isEngineOn(val)">yeah it's on</span>
          <span data-ng-show="!isEngineOn(val)"> standby</span>
          <button data-ng-disabled="isEngineOn(val)">Start engine</button>
      <div>
</div>

isEngineOn は、サーバーから受信した websocket メッセージで変化します。

繰り返しの各値ごとに、各ダイジェスト中に isEngineOn を 4 回評価しないようにする方法はありますか? 変数の初期化のようなものか何か?

4

3 に答える 3

1

単純な CSS を使用して、スパンで関数を呼び出さずにそれを行うことができます。特にバインディングを保存できるため、多くの要素を繰り返す場合は、JavaScript ソリューションよりもはるかに効率的だと思います。

<div data-ng-repeat="val in vals">
    <div data-ng-class:{'myClass':isEngineOn(val)}>
        <span class="showWhenOn">yeah it's on</span>
        <span class="showWhenOff"> standby</span>
        <button onclick="alert('Starting...')">Start engine</button>
    </div>
</div>

CSS:

.showWhenOn {
    display: none;
}

.myClass .showWhenOn {
    display: inline;
}

.myClass .showWhenOff {
    display: none;
}

.myClass button {
    pointer-events: none;
    color: silver;
}

JSフィドル

于 2015-02-15T16:26:52.650 に答える
0

サーバーから応答を受信したときに変化する変数にウォッチャーを設定できます。次に例を示します。

scope.$watch(function(){ return <var that changes>; }, function(oldv, newv){
    if(oldv !== newv)
        scope.isEngineOn = <Calculate here>;
});

次に使用します。

<span data-ng-show="isEngineOn">
于 2015-02-15T16:24:07.240 に答える