Modification de la taille du parent de la directive AngularJS


le n00b

Problème

J'ai une directive simple qui exécute des mises à jour de dimensionnement sur un élément particulier. Cela surveille la taille de la fenêtre et effectue les ajustements en conséquence.

MyApp.directive('resizeTest', ['$window', function($window) {
  return {
    restrict: 'AC',
    link: function(scope, element) {
      var w = angular.element($window);
      scope.$watch(function() {
        return { 'h': w.height(), 'w': w.width() };
      }, function(newValue, oldValue) {
        // resizing happens here
      }, true);
      w.bind('resize', function() { scope.$apply(); });
    }
  };
}]);

Cela fonctionne très bien.

Il se trouve qu'à l'intérieur de la divbalise associée, j'ai un enfant div. Lorsque le parent est redimensionné, je souhaite apporter des modifications de positionnement sur l'élément enfant. Cependant, je ne parviens pas à déclencher le déclenchement.

Cela est appelé au démarrage, mais ne se déclenche pas lorsque l'élément est redimensionné ou que la fenêtre change:

MyApp.directive('centerVertical', ['$window', function($window) {
  return {
    restrict: 'AC',
    link: function(scope, element) {
      element.css({border: '1px solid #0000FF'});
      scope.$watch('data.overlaytype', function() {
        $window.setTimeout(function() {
          console.log('I am:      ' + element.width() + 'x' + element.height());
          console.log('Parent is: ' + element.parent().width() + 'x' + element.parent().height());
        }, 1);
      });
    }
  };
}]);

Quel type de configuration de liaison ou de surveillance dois-je utiliser pour vérifier le redimensionnement de l'élément parent?

Violon

https://jsfiddle.net/rcy63v7t/1/

jcz

La valeur que data.overlaytypevous observez dans la centerVerticaldirective n'est pas sur le scopedonc la valeur résultante est undefinedet cette valeur ne change jamais, c'est pourquoi vous ne faites pas exécuter l'écouteur. Pour vérifier si la taille de l'élément parent a changé, vous pouvez le vérifier dans la fonction $ watch comme ceci:

scope.$watch(
    function () { 
        return {
           width: element.parent().width(),
           height: element.parent().height(),
        }
   },
   function () {}, //listener 
   true //deep watch
);

De plus, rappelez-vous que lorsque vous souhaitez utiliser un module déjà existant, vous ne pouvez pas l'appeler ainsi angular.module('myModule', [])car cela signifie créer un nouveau module. Vous devez simplement passer le nom du module angular.module('myModule'), ce qui explique pourquoi votre code n'a pas fonctionné.

Articles connexes


Modification de la taille du titre NavigationItem

José Tovar J'ai mis le titre dans un nevegationItem : let navigationItem = UINavigationItem() navigationItem.title = "Title" navigationBar.items = [navigationItem] cela fonctionne parfaitement... mais. Comment changer la taille du texte de Title..? Ashley Mil

Modification de la taille de police du titre du message

x0v: Je veux réduire la taille de la police du titre du post (du dernier post) et continuer à l'afficher au centre de mon blog basé sur jekyll. J'ai essayé de modifier https://github.com/x0v/x0v.github.io/blob/master/_sass/atoms/_feature-title.scss comme en aj

Modification de la valeur du modèle dans la directive Angularjs

Amine Alaoui J'essaye de créer une directive pour un élément d'entrée. Lorsqu'un nombre est entré, je veux mettre à jour la valeur d'entrée sur l'événement de flou en ajoutant des zéros comme «12» -> «0012». J'ai un paramètre passé à la directive pour spécifie

Modification de la taille du tableau numpy à la volée

Andy J'ai un tableau numpy qui commence vide et au cours d'une boucle est censé recevoir un certain nombre d'entrées, bien que je ne sache pas combien d'entrées il y aura avant l'exécution. J'ai essayé différentes choses pour diversifier le succès et actuellem

Modification de la taille du bac de l'histogramme

Pierre H Je veux une macro qui me permettra de déterminer la largeur d'enchère d'un histogramme. J'ai enregistré les actions de modification de la largeur réelle du bac, puis j'ai inséré la zone de saisie pour me permettre de le faire de manière plus dynamique

modification de la taille du texte de SCNText

Patate J'essaye de définir la taille de la police en utilisant ce code: func setupText(){ let text = SCNText(string: "textString", extrusionDepth: 4) textNode.geometry = text textNode.position = SCNVector3Make(0, -200, 5) scene.roo

Modification de la taille maximale du pool de threads fixes

AA: En ce moment, je crée un pool de threads fixe à l'aide du service Executor comme executor = Executors.newFixedThreadPool(coreAmount); Bien que ce soit bien, je me demandais s'il est possible de conserver le comportement de création d'un certain nombre de

Modification de la taille du texte en fonction de TextView

Gershon Papi Salut les gars, je me suis demandé si je pouvais redimensionner le texte du TextView afin de l'adapter à la vue du texte. Je veux que la vue texte ait une taille de texte par défaut, mais au cas où le texte serait trop long et nécessiterait plus d