Angular:時計がループ内で機能しない

user1131522

角度でウォッチイベントを動的に登録すると(私の場合はforループで)、ウォッチが機能しません。フィドルを見てください。何か案は?

var myApp = angular.module('myApp',[]);


function MyCtrl($scope, $parse) {

    // 1. binding watch inside loop (doesn't work):
    $scope.aaa = 1;
    $scope.bbb = 2;

    $scope.dependsOn = [
        function () { return $scope.aaa; },  
        function () { return $scope.bbb; }
    ];        

    for (var i = 0; i < $scope.dependsOn.length; i++) {        

        $scope.$watch(
            function () {
                return $scope.dependsOn[i];                    
            },
            function (newVal) {
                if (newVal !== undefined) {
                    console.log("doesn't work");
                }
            }
        );
    }    

    $scope.aaa = 5;
    $scope.bbb = 6;    

    // binding watch not inside loop (works):

    $scope.ccc = 1;
    $scope.ddd = 2;    

    $scope.dependsOn = [
        function () { return $scope.ccc; },
        function () { return $scope.ddd; }
    ];    

    $scope.$watch(
        function () {
            return $scope.dependsOn[0];                    
        },
        function (newVal) {
            if (newVal !== undefined) {
                console.log("works");
            }
        }
    );    

    $scope.$watch(
        function () {
            return $scope.dependsOn[1];                    
        },
        function (newVal) {
            if (newVal !== undefined) {
                console.log("works");
            }
        }
    );     

    $scope.ccc = 5;
    $scope.ddd = 6;      
}

フィドル

ゲント

発生している問題iは、クロージャで変数キャプチャしているためです次にi、値2にインクリメントされ、ループから外れます。各デリゲートはi、実際にデリゲートを実行すると、値として2になります。

デモンストレーション:http//jsfiddle.net/df6L0v8f/1/(追加:)

$scope.$watch(
     function () {
         console.log(i);
         return $scope.dependsOn[i];                    
     },
    function (newVal) {
         if (newVal !== undefined) {
              console.log("doesn't work");
         }
    }
);

自己呼び出しクロージャを使用して反復時に値をキャプチャし、デリゲートのためにそれを維持することで、これと変数の巻き上げの問題を修正できます。

http://jsfiddle.net/df6L0v8f/4/

for (var i = 0; i < $scope.dependsOn.length; i++) {        
     var watchDelegate = (function(itemDelegate){
          return function () {
              return itemDelegate;                    
          };
      })($scope.dependsOn[i]);

      $scope.$watch(
          watchDelegate,
          function (newVal) {
              if (newVal !== undefined) {
                  console.log(newVal());
              }
          }
      );
  }

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

一時停止機能がelifループで機能しない

分類Dev

scanf()がforループ内で正しく機能しない

分類Dev

jQueryコードがwhileループ内で機能しない

分類Dev

JavaScript asyncawaitがforEachループ内で機能しない

分類Dev

Invoke-WebRequestがForEachループ内で機能しない

分類Dev

Python Selenium driver.get()がforループ内で機能しない

分類Dev

C ++のループ内で再帰が機能しない

分類Dev

Visual Basic | IF、ELSEがDOWHILEループ内で機能しない

分類Dev

python tkintertag_bindがループ内で機能しない

分類Dev

preg_replaceがループ内で機能しない

分類Dev

sed が bash for ループ内で機能しない

分類Dev

whileループ内でクエリが機能しない

分類Dev

Pythonの関数内でForループが機能しない

分類Dev

do-whileループ内でC ++一時停止関数が機能していないようです

分類Dev

Angularアプリのulタグオーバーレイ内で垂直スクロールが機能しない

分類Dev

Angular 8ngStyleがループ内で機能しない場合があります

分類Dev

Array.pushがforEachloop.Javascript内のforループ内で機能しない

分類Dev

rbind()がforループ内で機能しないのはなぜですか?

分類Dev

Perlスクリプトを使用してforループ内でスリープ機能が機能しない

分類Dev

SQL-カーソルループ内で更新が機能しない

分類Dev

WatchKit拡張機能内でアプリグループが機能しないのはなぜですか?

分類Dev

Angular-CLIプロキシがDocker内で機能しない

分類Dev

配列へのプッシュがループ内で機能しない

分類Dev

ngx-toastrがAngular5サービスのアップロード機能内で機能しない

分類Dev

R: 'この' for 'ループ内で'条件が正しく機能しない場合

分類Dev

addEventListenerがforループ内で意図したとおりに機能しない

分類Dev

PHPコピー関数がforeachループ内で機能しない

分類Dev

Elseステートメントがwhileループ内で機能しない

分類Dev

24時間時計がdateformat Androidで機能しない

Related 関連記事

  1. 1

    一時停止機能がelifループで機能しない

  2. 2

    scanf()がforループ内で正しく機能しない

  3. 3

    jQueryコードがwhileループ内で機能しない

  4. 4

    JavaScript asyncawaitがforEachループ内で機能しない

  5. 5

    Invoke-WebRequestがForEachループ内で機能しない

  6. 6

    Python Selenium driver.get()がforループ内で機能しない

  7. 7

    C ++のループ内で再帰が機能しない

  8. 8

    Visual Basic | IF、ELSEがDOWHILEループ内で機能しない

  9. 9

    python tkintertag_bindがループ内で機能しない

  10. 10

    preg_replaceがループ内で機能しない

  11. 11

    sed が bash for ループ内で機能しない

  12. 12

    whileループ内でクエリが機能しない

  13. 13

    Pythonの関数内でForループが機能しない

  14. 14

    do-whileループ内でC ++一時停止関数が機能していないようです

  15. 15

    Angularアプリのulタグオーバーレイ内で垂直スクロールが機能しない

  16. 16

    Angular 8ngStyleがループ内で機能しない場合があります

  17. 17

    Array.pushがforEachloop.Javascript内のforループ内で機能しない

  18. 18

    rbind()がforループ内で機能しないのはなぜですか?

  19. 19

    Perlスクリプトを使用してforループ内でスリープ機能が機能しない

  20. 20

    SQL-カーソルループ内で更新が機能しない

  21. 21

    WatchKit拡張機能内でアプリグループが機能しないのはなぜですか?

  22. 22

    Angular-CLIプロキシがDocker内で機能しない

  23. 23

    配列へのプッシュがループ内で機能しない

  24. 24

    ngx-toastrがAngular5サービスのアップロード機能内で機能しない

  25. 25

    R: 'この' for 'ループ内で'条件が正しく機能しない場合

  26. 26

    addEventListenerがforループ内で意図したとおりに機能しない

  27. 27

    PHPコピー関数がforeachループ内で機能しない

  28. 28

    Elseステートメントがwhileループ内で機能しない

  29. 29

    24時間時計がdateformat Androidで機能しない

ホットタグ

アーカイブ