Bonjour,

Je suis en train d'apprendre AngularJs.
Chaque ng-repeat a son propre scope non? Alors pourquoi mon code réagi ainsi?

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>

        <div ng-app="app">
            <div ng-controller="exCtrl">
                <input ng-model=count /> [{{count}}]<br><hr>
                <div ng-repeat="v in [1,2,3]">
                    <button ng-click="incr()">{{count}}</button>
                </div>
            </div>
        </div>

        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
        <script>
            var app = angular.module("app", []);

            app.controller("exCtrl", function($scope) {
                $scope.count = 1;
                $scope.incr = function(){$scope.count++;};
            });
        </script>
    </body>
</html>

Merci.

3 réponses


Grafikart
Réponse acceptée

Parceque la fonction est au niveau du scope du controller, donc la fonction affecte le scope du controller. Si en revanche tu mettais count = count + 1 dans ton click il affecterait alors le scope dans le repeat.

Traitor
Auteur

Erreur de manipulation : tu n'a pas répondu à ma question lol.

Sinon, il y a 3 buttons dans 3 scopes différents (ng-repeat), ils modifient la propriété (de leur scope...) $scope.count par le biais d'une fonction de leur scope $scope.incr(). Pourquoi la fonction incr() affecte tous les $scope.count?

Traitor
Auteur

You damn right!
Thanks.