recherche

Maison  >  Questions et réponses  >  le corps du texte

angulaire.js - Concernant la question de la création de variables dans la directive Link

angular.module("myDirective",[])
    .directive("tabOne",function (){
        return{
            restrict:"E",
            replace:true,
            scope:{
                data:"=myData",
            },
            transclude:true,
            template:' <p ng-hide="show">'+
            '<p ng-repeat="x in data">'+
                '{{x}}'+
    '</p>'+
    '</p>',
            link:function(scope,elem,attr){
                scope.show=true;
               elem.find("p").on("click",function(){
                    scope.show=!scope.show;
                    console.log(scope.show);
                });
            }
        }
    })

Comme le montre la question, je crée maintenant un show variable dans le lien. Ce show est utilisé dans le modèle pour indiquer si hide ou scope.show affiche toujours true ?
Je ne sais pas où se situe le problème, donnez-moi quelques conseils ! Merci
Mais console.log (scope.show) change de manière synchrone

phpcn_u1582phpcn_u15822755 Il y a quelques jours685

répondre à tous(2)je répondrai

  • 给我你的怀抱

    给我你的怀抱2017-05-15 17:05:33

    Modifier :

    elem.find("p").on("click",function(){
        scope.show=!scope.show;
        scope.$apply();
    });

    Supplément :

    Lire la documentation

    Le document dit que s'il s'agit d'une opération synchrone en controller, ou d'une opération asynchrone via $http, $timeout, $interval, scope.$apply() est automatiquement exécuté (Angular vous aide a fait). Mais vous ne remplissez évidemment pas les conditions ici. Vous avez utilisé DOM API, vous devez donc afficher et appeler manuellement scope.$apply()

    .

    Adresse du document : champ d'application

    répondre
    0
  • 漂亮男人

    漂亮男人2017-05-15 17:05:33

    Merci pour le conseil. Après avoir lu la documentation, beaucoup de mes propres méthodes déclencheront apply et dom. L'opération de settimeout ne déclenchera pas apply

    .

    répondre
    0
  • Annulerrépondre