2017-06-26 2 views
0

J'ai ce code:

.directive('hostelGridBed', function($rootScope){ 
return { 
    restrict: 'E', 
    scope: { 
     config: '=', 
     range: '=', 
     days: '=' 
    }, 
    link: function(scope, element){ 

    }, 
    controller: ['$scope', function($scope){ 
     $scope.innerStay = ''; 
     function switchStay(data){ 
     $rootScope.$broadcast('SwitchStay', {data: data.config}); 
     }; 
     $scope.onDropComplete = function(data,evt){ 
     //$rootScope.$broadcast 
     switchStay(data); 
     console.log('Drop completo bed!'); 
     } 
    }], 
    templateUrl: './js/templates/hostelgridbed.html' 
    } 
}) 
.directive('hostelGridDay', function(StaysFactory){ 
    return { 
    restrict: 'E', 
    scope: { 
     config: '=', 
     date: '=' 
    }, 
    link: function(scope,element){ 
    }, 
    controller: ['$scope','$rootScope', function($scope,$rootScope){ 
     $scope.switchStay = function(evt, data){ 
     console.log(data); 
     // Here. How can I access this controller's $scope 
     } 
     $scope.$on('SwitchStay', $scope.switchStay); 
    }], 
    templateUrl: './js/templates/hostelgridday.html' 
    } 
}) 

-je obtenir des données à partir de $ diffuser ok, il est tout bon. Sauf que j'ai besoin d'accéder à la portée $ de la directive depuis la fonction $ scope.switchStay. Y a-t-il un moyen d'accomplir cela?

+0

Le code que j'ai cité est à l'intérieur de la portée $ de la directive. J'ai besoin d'accéder au même $ scope que switchStay, de l'intérieur. – Pablo

+1

Je viens de répondre en pensant que vous ne parliez pas du même '$ scope'. Quelle est votre question? Dans la fonction, vous pouvez simplement utiliser '$ scope' et vous y accéderez ... – quirimmo

+0

Non, vous ne le ferez pas. Il n'y a pas de portée à l'intérieur de la fonction. – Pablo

Répondre

0

En fait, lorsque vous $broadcast ou $emit l'événement de la directive, vous pouvez également envoyer la portée de la directive en tant que paramètre. Ça devrait marcher, mais c'est vraiment horrible et c'est une très mauvaise pratique.

Qu'est-ce que vous avez à faire dans ces cas est d'ajouter un paramètre de rappel à la directive (&) et assurer la fonction switchStay comme rappel, et déclencher simplement de la directive, en passant les paramètres que vous avez besoin pour accéder à l'intérieur du fonction.

J'espère que cela a du sens.

+0

Le problème est que la directive $ $ broadcast n'est pas la même que celle de $ scope. $ On. Comment serait-ce mieux dans ce cas? – Pablo

+0

C'est exactement le cas quand utiliser les paramètres '&' comme rappel – quirimmo

+0

Juste mis à jour le code. Je ne peux pas comprendre ce que tu veux dire – Pablo