5 votes

AngularJS : Impossible d'obtenir une valeur de variable de la portée ctrl dans la directive

HostingCtrl :

function HostingListCtrl($scope, Hosting) {

    Hosting.all().success(function(data) {
        $scope.hostings = data;
    }); 
}

Modèle HTML :

 <pagination items-count="{{hostings.length}}" current-page="currentPage" items-per-page="{{itemsPerPage}}"></pagination>

Directive :

admin.directive('pagination', function() {
    return {
        restrict: 'E',
        replace: true,        
        templateUrl: "<%= asset_path('angular/templates/ui/pagination.html') %>",
        scope: {            
            currentPage: '=',
            itemsCount: '@',
            itemsPerPage: '@'
        },
        controller: function($scope, $element, $attrs) {
            console.log($scope);
            console.log($scope.itemsCount);          
        },
        link: function(scope, element, attrs, controller) {                         
        }
    };
});

J'essaie d'obtenir la valeur de la variable itemsCount dans la directive mais lorsque j'essaie de l'enregistrer dans console.log, la valeur est vide. Ce qui est étrange, c'est que lorsque console.log est utilisé dans toute la portée, la valeur est présente :

Scope {$id: "005", $$childTail: null, $$childHead: null, $$prevSibling: null,
  $$nextSibling: null…}
  $$asyncQueue: Array[0]
  $$childHead: null
  $$childTail: null
  $$destroyed: false
  $$isolateBindings: Object
  $$listeners: Object
  $$nextSibling: Child
  $$phase: null
  $$prevSibling: null
  $$watchers: Array[3]
  $id: "005"
  $parent: Child
  $root: Scope
  currentPage: 1
  itemsCount: "11"
  itemsPerPage: "5"
  this: Scope
  __proto__: Object

Aussi, quand je vérifie la source HTML

<nav class="pagination" items-count="11" current-page="currentPage" items-per-page="5">

5voto

Mark Rajcok Points 85912

Avec une portée isolée et l'option @ vous devez utiliser la notation $attrs.$observe('itemsCount', function(value) { ... } .

Voir http://docs.angularjs.org/guide/directive#attributes

Lorsque les fonctions du contrôleur (et de la liaison) s'exécutent pour la première fois, la fonction @ ne sont pas encore remplies. Vous voyez la valeur dans le journal parce qu'au moment où vous développez l'objet $scope, la valeur a été remplie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X