la modification d'un contrôleur de portée de variable dans une directive n'est pas reflété dans la fonction de contrôleur

Dans mon directive, j'ai un contrôleur de variable, la page qui est incrémenté lorsque vous appuyez sur le bouton dans la directive. Cependant, à la ligne suivante, scope.alertPage() qui appelle la fonction de contrôleur de ne pas tenir compte de ce changement. Avis, lorsque vous cliquez sur le bouton page est toujours alerté 1!

Je sais que je peux résoudre ce problème en ajoutant $scope.$s'appliquent dans le contrôleur, mais ensuite, je reçois le message d'erreur qui dit un résumé est déjà en place.

Plunker

app = angular.module('app', []);

app.controller('myCtrl', function($scope) {

  $scope.page = 1;

  $scope.alertPage = function() {
    alert($scope.page);
  }

})

app.directive('incrementer', function() {
  return {
    scope: {
      page: '=',
      alertPage: '&'
    },
    template: '<button ng-click="incrementPage()">increment page</button>',

    link: function(scope, elem, attrs) {
      scope.incrementPage = function() {
          scope.page += 1;
          scope.alertPage();
      }
    }
  }
})

modèle html:

  <body ng-app='app' ng-controller='myCtrl'>
    page is {{page}}

    <incrementer page='page' alert-page='alertPage()'></incrementer>
  </body>
Le placer dans un $timeout ou lier 2 voies à un objet avec la propriété. Depuis qu'il est à 2 voies de liaison, l'original 2 tenu de la valeur sera mise à jour lors de la prochaine digérer cycle. j'.e essayer $timeout(scope.alertPage) ou d'une autre façon que vous pouvez essayer dans votre contrôleur de jeu $scope.page = {value : 1} et dans la directive ne $scope.page += 1; de repos et de ce que vous faites

OriginalL'auteur sq1020 | 2014-12-17