私は本を読んでいて、ng-classでこの例The Complete Book on AngularJS, Ari Lerner
を見つけました。関数内に console.log を 1 つ追加しました。一度だけログに記録されていることがわかります。generateNumber()
x
その後、使用されている場所をgenerateNumber()
関数呼び出しに置き換えました。私の変更後、私のコードは次のようになります。
HTML
<!doctype html>
<html ng-app="myApp">
<head>
<link rel="stylesheet" href="//cdn.jsdelivr.net/foundation/4.3.2/css/foundation.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0-rc.2/angular.js"></script>
</head>
<body>
<div ng-controller="LotteryController">
<div ng-class="{red: generateNumber() > 5}">
You won!
</div>
<button ng-click="generateNumber()">Draw Number</button>
<p>Number is: {{ x }}</p>
</div>
</body>
</html>
JS
angular.module('myApp', [])
.controller('LotteryController', function($scope) {
$scope.generateNumber = function() {
var num = Math.floor((Math.random()*10)+1);
console.log("Number: "+num);
$scope.x = num;
return num;
};
});
そのため、何度もログに記録された理由を理解できずconsole.log()
、ボタンをクリックしても、一度しかログに記録されていないはずですが、複数回ログに記録されました。なぜそのメソッドが何度も呼び出されるのか理解できません。また、この例外が発生することもあります(上の2行だけを貼り付けました)
Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations:
この $digest は何のためですか? そして限界に達した理由。ウォッチャーとは?ロギングが何度も行われる理由を教えてください。君たちありがとう、
編集
返信ありがとうございますng-class="{red: generateNumber() > 5}"
。誰かが私にこれを説明できますか。そこでは使いたくない$scope.x
ので、今は無視してください。
君たちありがとう、