2
<html ng-app>
<head>
    <script language="javascript" src="./angular-1.0.6/angular.js"></script>
    <script language="javascript">
        function scopeReady(s) {
            document.getElementById("btn").addEventListener("click", function(event) {
                alert(s.items);
                s.btnClick();
                alert(s.items);
            });
        }

        function ctrl($scope) {
            $scope.items = ["abc", "def", "ghi"];
            $scope.btnClick = function() {
                $scope.items.push("one more");
            };
            scopeReady($scope);
        }
    </script>
</head>
<body ng-controller="ctrl">
<li ng-repeat="item in items">{{item}}</li>
<button id="btn">Event Handler</button>
<button ng-click="btnClick()">Angular ngClick</button>
</body>
</html>

コード スニペットが示すように、最初のボタンをクリックしても DOM の更新がトリガーされないのはなぜですか? ng-click とイベント ハンドラーの両方が同じ関数を呼び出して続行します。それは私を混乱させる静かです。

4

1 に答える 1

4

イベント ハンドラーは Angular の「外部」で実行されるため、Angular は への変更を認識しないitemsため、ng-repeat は再レンダリングされません。ビューを更新するダイジェスト サイクルs.$apply()を Angular に実行させるために呼び出します。

ng-click を使用するscope.$apply()と、自動的に呼び出されます。

于 2013-04-27T15:48:06.500 に答える