Partage
  • Partager sur Facebook
  • Partager sur Twitter

checkbox angular

    16 mars 2017 à 19:10:22

    Bonjour,

    je ne comprends pas car le code que je vais vous donner donne ceci : il y a une checkbox et un bouton "tout cocher" et, qd on coche le bouton "tout cocher" les éléments de la checkbox ne st pas cochés mais par contre qd on décoche "tt cocher", ils se cochent :

    voici le code :

    index.html :

    <!DOCTYPE html>
    <html lang="fr" ng-app="demoApp">
        <head>
            <meta charset="utf-8" />
            <title>Todo List</title>       
            <link rel="stylesheet" href="web/css/style.css">
            <script src="angular.js"></script>
            <script src="todoList.js"></script>
        </head>
        <body>
            <header>
                <h1>Todo List</h1>
            </header>
            <section ng-controller="todoCtrl">
                <form id="todo-form" ng-submit="addTodo()">
                    <input id="new-todo" placeholder="Que devez-vous faire ?" ng-model="newTodo" />
                </form>
                <article ng-show="todos.length">
                    <ul id="todo-list">
                        <li ng-repeat="todo in todos" ng-class="{completed: todo.completed}">
                            <div class="view">
                                <input class="mark" type="checkbox" ng-model="todo.completed" />
                                <span>{{todo.title}}</span>
                                <span class="close" ng-click="removeTodo(todo)">x</span>
                            </div>
                        </li>
                    </ul>
                    <input id="mark-all" type="checkbox" ng-model="allChecked" ng-click="markAll(allChecked)" />
                    <label class="btn btn-info" for="mark-all">Tout cocher</label>
                    <button class="btn btn-danger" ng-click="clearCompletedTodos()">Supprimer les tâches cochées</button>
                </article>
            </section>
        </body>
    </html>

    todoList.js:

    // js/todoList.js
    'use strict';


    /**
     * Déclaration de l'application demoApp
     */
    var demoApp = angular.module('demoApp', [
        // Dépendances du "module"
        'todoList'
    ]);

    /**
     * Déclaration du module todoList
     */
    var todoList = angular.module('todoList',[]);


    /**
     * Contrôleur de l'application "Todo List" décrite dans le chapitre "La logique d'AngularJS".
     */
    todoList.controller('todoCtrl', ['$scope',
        function ($scope) {

            // Pour manipuler plus simplement les todos au sein du contrôleur
            // On initialise les todos avec un tableau vide : []
            var todos = $scope.todos = [];

            // Ajouter un todo
            $scope.addTodo = function () {
                // .trim() permet de supprimer les espaces inutiles
                // en début et fin d'une chaîne de caractères
                var newTodo = $scope.newTodo.trim();
                if (!newTodo.length) {
                    // éviter les todos vides
                    return;
                }
                todos.push({
                    // on ajoute le todo au tableau des todos
                    title: newTodo,
                    completed: false
                });
                // Réinitialisation de la variable newTodo
                $scope.newTodo = '';
            };

            // Enlever un todo
            $scope.removeTodo = function (todo) {
                todos.splice(todos.indexOf(todo), 1);
            };

            // Cocher / Décocher tous les todos
            $scope.markAll = function (completed) {
                todos.forEach(function (todo) {
                    todo.completed = !completed;
                });
            };

            // Enlever tous les todos cochés
            $scope.clearCompletedTodos = function () {
                $scope.todos = todos = todos.filter(function (todo) {
                    return !todo.completed;
                });
            };
        }
    ]);

    Pouvez vous m'aider s'il vous plait?

    • Partager sur Facebook
    • Partager sur Twitter
      17 mars 2017 à 0:34:09

      Tu as un problème de logique dans ta fonction $scope.markAll. En effet, tu utilises ng-model="allChecked" sur l'input checkbox, puis ta fonction prend en paramètre le nouvel état des cases à cocher. Or, cet état est représenté par l'état de ta checkbox, celle qui utilise ng-model="allChecked". Ta fonction devrait donc ressembler à ça :

      $scope.markAll = function () {
          todos.forEach(function (todo) {
              todo.completed = $scope.allChecked;
          });
      };



      • Partager sur Facebook
      • Partager sur Twitter
      Développeur Front-End freelance disponible pour contrats ! En guerre contre l'utilisation abusive de jQuery.
        17 mars 2017 à 12:34:52

        merci mais je ne comprends pas : il faut te dire que je suis débutante et le code je l'ai pris sur un tuto.

        Si todo.completed=!completed, ça veut dire de changer l'état de completed non?Or completed était à false dc ça devrait le mettre à true non? donc les cases devraient se cocher...?

        darenju a écrit:

        Tu as un problème de logique dans ta fonction $scope.markAll. En effet, tu utilises ng-model="allChecked" sur l'input checkbox, puis ta fonction prend en paramètre le nouvel état des cases à cocher. Or, cet état est représenté par l'état de ta checkbox, celle qui utilise ng-model="allChecked". Ta fonction devrait donc ressembler à ça :

        $scope.markAll = function () {
            todos.forEach(function (todo) {
                todo.completed = $scope.allChecked;
            });
        };





        • Partager sur Facebook
        • Partager sur Twitter
          17 mars 2017 à 13:26:50

          La case a cocher doit agir sur toutes les checkbox. Donc l'état ne doit pas dépendre d'un TODO mais bien d'autre chose.
          • Partager sur Facebook
          • Partager sur Twitter
          Développeur Front-End freelance disponible pour contrats ! En guerre contre l'utilisation abusive de jQuery.
            22 mars 2017 à 13:52:32

            je ne comprends pas :la case à cocher pour moi (la case à cocher "tout cocher") doit agir seulement sur les "checkbox-todos", ce n'est pas le cas?Et, si ce n'est pas le cas,pourquoi?

            darenju a écrit:

            La case a cocher doit agir sur toutes les checkbox. Donc l'état ne doit pas dépendre d'un TODO mais bien d'autre chose.



            • Partager sur Facebook
            • Partager sur Twitter
              23 mars 2017 à 12:22:24

              je remonte ce topic...

              -
              Edité par IsabellePasvraideux 24 mars 2017 à 11:32:28

              • Partager sur Facebook
              • Partager sur Twitter
                25 mars 2017 à 17:35:50

                Tu prends le problème à l'envers. Lorsque tu cliques sur la case "tout cocher", les cases de todo doivent prendre l'état de la case "tout cocher". Tu comprends ?
                • Partager sur Facebook
                • Partager sur Twitter
                Développeur Front-End freelance disponible pour contrats ! En guerre contre l'utilisation abusive de jQuery.
                  27 mars 2017 à 18:04:53

                  Je comprends ta logique (qui est LA BONNE logique).Merci.

                  Maintenant j'ai une nouvelle chose que je ne comprends pas ce que je ne comprends pas c'est par rapport à la fonction $scope.clearCompletedTodos.

                  Que représente !todo.completed?

                  Merci

                  darenju a écrit:

                  Tu prends le problème à l'envers. Lorsque tu cliques sur la case "tout cocher", les cases de todo doivent prendre l'état de la case "tout cocher". Tu comprends ?



                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 mars 2017 à 18:23:24

                    !todos.completed signifie "est-ce que la valeur de todo.completed vaut faut.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Développeur Front-End freelance disponible pour contrats ! En guerre contre l'utilisation abusive de jQuery.
                      27 mars 2017 à 18:32:47

                      Mais !todos.completed, ça ne veut pas dire "différent de todos.completed"?

                      darenju a écrit:

                      !todos.completed signifie "est-ce que la valeur de todo.completed vaut faut.



                      • Partager sur Facebook
                      • Partager sur Twitter
                        27 mars 2017 à 18:59:32

                        Non. Ce serait todos.completed !== [...]. En fait, ta fonction filter à la fin du code, elle renvoie tous les todos qui ne sont pas completed.

                        Je pense qu'il faudrait que tu refasses un tour sur le cours de base de JavaScript, histoire de savoir ce que font les lignes simples.

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Développeur Front-End freelance disponible pour contrats ! En guerre contre l'utilisation abusive de jQuery.
                          27 mars 2017 à 19:19:37

                          par "renvoie" tu veux dire qu'elle les supprime ou qu'elle les garde?

                          Je sais que la fonction filter c'est pour trier (et donc garder) des choses, mais je ne comprends pas ta phrase...

                          Je suis en train de refaire un tour sur les cours de base de javascript en ce moment, et j'ai déjà bien avancé...

                          darenju a écrit:

                          Non. Ce serait todos.completed !== [...]. En fait, ta fonction filter à la fin du code, elle renvoie tous les todos qui ne sont pas completed.

                          Je pense qu'il faudrait que tu refasses un tour sur le cours de base de JavaScript, histoire de savoir ce que font les lignes simples.



                          • Partager sur Facebook
                          • Partager sur Twitter
                            27 mars 2017 à 19:21:56

                            Elle renvoie dans le sens, sa valeur de retour est. La fonction filter renvoie tous les éléments qui répondent à une certaine condition. Le callback de la fonction filter renvoie vrai ou faux suivant si l'élément doit être conservé ou non.
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Développeur Front-End freelance disponible pour contrats ! En guerre contre l'utilisation abusive de jQuery.
                              27 mars 2017 à 19:31:36

                              Mais que veut dire le point d'exclamation avant todo.completed?

                              Je suis désolée de t'embeter avec ça mais jusqu'à présent je ne l'ai pas vu dans le cours javascript(le coup du point d'exclamation), pourtant, j'ai bien avancé...

                              darenju a écrit:

                              Elle renvoie dans le sens, sa valeur de retour est. La fonction filter renvoie tous les éléments qui répondent à une certaine condition. Le callback de la fonction filter renvoie vrai ou faux suivant si l'élément doit être conservé ou non.



                              • Partager sur Facebook
                              • Partager sur Twitter
                                27 mars 2017 à 19:34:49

                                Le point d'exclamation signifie en quelque sorte "inverse de". Regarde :

                                • Partager sur Facebook
                                • Partager sur Twitter
                                Développeur Front-End freelance disponible pour contrats ! En guerre contre l'utilisation abusive de jQuery.
                                  27 mars 2017 à 19:43:58

                                  Mais que vaut todo.completed pour toi?Vrai?faux?

                                  Parce que la logique voudrait que l'on élimine les cases cochées et que l'on garde les cases non cochées.

                                  Ce qui voudrait dire que "!todo.completed" vaut false puisque garde les non cochées.

                                  Ce qui voudrait dire que todo.completed vaudrait true, or pourquoi vaudrait il true?

                                  darenju a écrit:

                                  Le point d'exclamation signifie en quelque sorte "inverse de". Regarde :
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    27 mars 2017 à 20:00:17

                                    Non, todo.completed vaut la valeur completed de l'objet todo... De plus, il s'agit ici de garder les todos qui ne sont pas finis. D'où le fait de vouloir "inverse" de todo.completed. Dans une condition, todo.completed voudrait dire todo.completed === true.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Développeur Front-End freelance disponible pour contrats ! En guerre contre l'utilisation abusive de jQuery.
                                      27 mars 2017 à 20:19:39

                                      Mais le but à la base n'est il pas par rapport à cette fonction $scope.clearCompletedTodos , de supprimer les todos cochés?

                                      Parce que sur le bouton il y a marqué "supprimer les taches cochées".

                                      De plus, quand tu testes, et que tu cliques sur ce bouton, il supprime effectivement les cochés.

                                      Alors pourquoi me dis tu que le but ce n'est pas de supprimer les cochés mais de supprimer les non finis?

                                      darenju a écrit:

                                      Non, todo.completed vaut la valeur completed de l'objet todo... De plus, il s'agit ici de garder les todos qui ne sont pas finis. D'où le fait de vouloir "inverse" de todo.completed. Dans une condition, todo.completed voudrait dire todo.completed === true.



                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        27 mars 2017 à 20:35:23

                                        Bah... un todo n'est pas fini si sa case nest pas cochée, ce que je dis n'est donc pas faux. Si ?
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Développeur Front-End freelance disponible pour contrats ! En guerre contre l'utilisation abusive de jQuery.
                                          27 mars 2017 à 20:41:34

                                          Est ce que la propriété completed est une propriété qui existe déjà dans javascript ou angularjs, ou est ce que l'auteur a inventé ce nom??

                                          -
                                          Edité par IsabellePasvraideux 27 mars 2017 à 20:53:23

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            27 mars 2017 à 21:43:49

                                            Oula... As-tu vraiment compris ce que tu faisais ? todo est un objet JavaScript, et completed est une propriété de cet objet. La propriété aurait très bien pu s'appeler "termine" ou "fini".
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Développeur Front-End freelance disponible pour contrats ! En guerre contre l'utilisation abusive de jQuery.
                                              27 mars 2017 à 22:05:54

                                              Oui je sais que completed est une propriété de l'objet.

                                              Mais comment sait il que la propriété completed correspond à "coché" ou "non coché"??

                                              darenju a écrit:

                                              Oula... As-tu vraiment compris ce que tu faisais ? todo est un objet JavaScript, et completed est une propriété de cet objet. La propriété aurait très bien pu s'appeler "termine" ou "fini".



                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                27 mars 2017 à 22:13:47

                                                Parce que tu l'as "bindé" avec Angular :

                                                <input class="mark" type="checkbox" ng-model="todo.completed" />



                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Développeur Front-End freelance disponible pour contrats ! En guerre contre l'utilisation abusive de jQuery.
                                                  27 mars 2017 à 22:17:11

                                                  oui mais ça ne pourrait pas correspondre à une autre propriété d'input?Comment sait il que cette propriété là qui est rattachée à input (bindée) veut dire "est ce que la case est cochée?"?

                                                  darenju a écrit:

                                                  Parce que tu l'as "bindé" avec Angular :

                                                  <input class="mark" type="checkbox" ng-model="todo.completed" />





                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    27 mars 2017 à 22:26:02

                                                    C'est l'attribut ng-model de la balise input qui indique à quoi est relié le champ. C'est comme ça que fonctionne Angular...
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    Développeur Front-End freelance disponible pour contrats ! En guerre contre l'utilisation abusive de jQuery.
                                                      27 mars 2017 à 22:35:18

                                                      ng-model je ne sais pas si je sais très bien ce que c'est .Ng-click je comprends c'est au clic.

                                                      Mais je vais pas t'embeter + longtemps ; merci pour toutes les réponses que tu m'as faites jusqu'à présent concernant ce topic,ce programme...

                                                      darenju a écrit:

                                                      C'est l'attribut ng-model de la balise input qui indique à quoi est relié le champ. C'est comme ça que fonctionne Angular...



                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        27 mars 2017 à 22:39:20

                                                        ng-model permet de relier un élément HTML, typiquement un champ (case à cocher, liste déroulante, etc.) à un objet JS.
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        Développeur Front-End freelance disponible pour contrats ! En guerre contre l'utilisation abusive de jQuery.
                                                          27 mars 2017 à 22:45:09

                                                          oui mais comment sait il que la propriété completed correspond à l'état (coché) de la case?

                                                          D'accord c'est bindé avec angular avec ng-model="todo.completed".

                                                          Ng-model relie l'input au javascript, mais comment sait-il que cela correspond à l'état (coché) de la cas?

                                                          darenju a écrit:

                                                          ng-model permet de relier un élément HTML, typiquement un champ (case à cocher, liste déroulante, etc.) à un objet JS.



                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            27 mars 2017 à 23:08:02

                                                            true ou false. true = coché, false = décoché.
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                            Développeur Front-End freelance disponible pour contrats ! En guerre contre l'utilisation abusive de jQuery.

                                                            checkbox angular

                                                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                            • Editeur
                                                            • Markdown