AngularJS 1.4 directives: champ d'application, une liaison bidirectionnelle et bindToController

Mise à jour: Il doit avoir été quelque chose de stupide dans une autre partie du code. Il travaille maintenant, de sorte que le bindToController syntaxe est très bien.

Nous sommes en utilisant AngularJS 1.4, qui a introduit un nouvelle façon d'utiliser bindToController dans les directives.

Après un peu de lecture (et peut-être de ne pas tout comprendre), nous avons défini notre directive comme ceci:

  .directive('mdAddress', function mdAddress() {
    var directive = {
      restrict: 'EA',
      scope: {},
      bindToController: {
        address: '='
      },
      templateUrl: 'modules/address/address.html',
      controller: AddressController,
      controllerAs: 'dir'
    };

De l'appeler à partir d'un autre point de vue comme ceci:

  <md-address address="vm.address"></md-address>

Ayant préalablement définies dans la vue contrôleur:

  vm.address = {
    street: null,
    countryCode: null,
    cityCode: null,
    postalCode: null
  };

Référencer les variables dans la directive modèle comme celui-ci:

  <md-input-container>
    <label>{{'ADDRESSNUMBER' | translate}}</label>
    <input type="number" ng-model="dir.address.streetNumber">
  </md-input-container>

Nous avons passé 4h à essayer de comprendre pourquoi notre directive n'a pas de travail. Eh bien, c'était du travail, mais dans les deux sens de la liaison entre le contrôleur et la directive n'a pas été, vm.address.street était complètement nulles.

Après un certain temps, nous avons juste essayé à l'ancienne:

  .directive('mdAddress', function mdAddress() {
    var directive = {
      restrict: 'EA',
      scope: {
        address: '='
      },
      bindToController: true,
      templateUrl: 'modules/address/address.html',
      controller: AddressController,
      controllerAs: 'dir'
    };

Et la magie a fonctionné. Toute idée POURQUOI?

Qu'avez-vous dans votre modules/address/address.html modèle? Si vous essayez de référence vm à tous dans le modèle, puis que serait la cause d'un problème de null depuis vm n'existe pas dans le champ d'application de la directive. Aussi, si vous essayez juste de les lier à des address dans la directive modèle, qui n'existent pas en tant que vous êtes à la liaison de votre contrôleur dir, de sorte qu'il devrait être dir.address
Dans le modèle que nous avons référencé les éléments avec dir: <input type="number" ng-model="dir.address.streetNumber">. J'ai édité le poste principal pour clarifier cela. Merci.
S'il vous plaît, fournir deux plunkers, pour les deux cas. Il est simple explication à cela, mais il est évident que le texte ne donne pas une idée claire de ce que vous avez fait exactement.
J'ai rencontré un problème similaire de pré-mise à 1,4+. Aucune chance d'émission d'origine est toujours référencement ancienne version Angulaire?
Hmm, c'est une possibilité, mais je suis sûr que nous avons changé l'angle de version avant de les essayer. Difficile à dire maintenant 🙂

OriginalL'auteur LeoLozes | 2015-08-06