-2

J'utilise une directive dans ma page html sous l'impression d'un contrôleur. J'ai besoin d'appeler une fonction de contrôleur de cette directive, mais je suis incapable de le faire correctement. Chaque fois qu'il y a des erreurs. Est-ce que n'importe quel corps peut m'aider? S'il vous plaît :( est le code ci-dessousComment appeler correctement une fonction de contrôleur avec une directive?

app.directive('myGoogleAutocomplete', function() { 
    return { 
     replace: true, 
     require: 'ngModel', 
     scope: { 
      ngModel: '=', 
      googleModel: '=', 
      onSelect: '&?', // optional callback on selected successfully: 'onPostedBid(googleModel)' 
     }, 
     template: '<input class="form-control" type="text" style="z-index: 100000;" autocomplete="on">', 
     link: function ($scope, element, attrs, model) { 
      var googleOptions = { 
       types: ['address'] // change or empty it, if you want no restrictions 
      }; 

      var autocomplete = new google.maps.places.Autocomplete(element[0], googleOptions); 

      google.maps.event.addListener(autocomplete, 'place_changed', function() { 


       /** 
       * Search gor the passed 'type' of info into the google place component 
       * @param {type} components 
       * @param {type} type 
       * @returns {type} 
       */ 
       $scope.extract = function (components, type) { 
        for (var i = 0; i < components.length; i++) 
         for (var j = 0; j < components[i].types.length; j++) 
          if (components[i].types[j] == type) return components[i].short_name; 
        return ''; 
       }; 


       $scope.$apply(function() { 
        var place = autocomplete.getPlace(); 
        if (!place.geometry) 
        { 
         // User entered the name of a Place that was not suggested and pressed the Enter key, or the Place Details request failed. 
         model.$setValidity('place', false); 
         //console.log("No details available for input: '" + place.name + "'"); 
         return; 
        } 


        console.log($scope.googleModel.longitude); 

        console.log($scope.googleModel.latitude); 
     $scope.thisFunct(); //want to call controller func here 

        if (place.address_components) { 
         $scope.googleModel.address = [ 
          $scope.extract(place.address_components, 'route'), 
          $scope.extract(place.address_components, 'street_number') 
         ].join(' '); 

        } 

        model.$setViewValue(element.val()); 
        model.$setValidity('place', true); 
        if (attrs.onSelect) $scope.onSelect({ $item: $scope.googleModel }); 
       }); 
      }); 
     } 
    } 
}); 

// 
app.controller("featureController", function($scope,$http,$rootScope,close,ModalService,NgMap) { 
     $scope.thisFunct=function() 
     { 
      console.log("Reached Here finally! Success "); 
     } 
<my-google-autocomplete id="address" name="address" 
     ng-model="task.house_no" google-model="model.googleAddress" 
     on-select="vm.onSelectGoogleAddress($item)" autocomplete="off" 
     required> 
    </my-google-autocomplete> 
+0

ans est supprimé rahi.shah –

+0

Lorsque vous posez une question sur un problème causé par votre code, vous obtiendrez de bien meilleures réponses si vous fournissez du code que les gens peuvent utiliser pour reproduire le problème.Utilisez aussi peu de code que possible qui produit toujours le même problème.Voir [Comment créer un fichier minimal, complet et vérifiable Exemple] (https://stackoverflow.com/help/mcve). – georgeawg

+0

Le code '$ scope.onSelect ({$ item: $ scope.googleModel})' appelle correctement la fonction. S'il vous plaît clarifier votre problème spécifique ou ajouter des détails supplémentaires pour mettre en évidence exactement ce dont vous avez besoin. Comme c'est écrit actuellement, il est difficile de dire exactement ce que vous demandez. – georgeawg

Répondre

-1

En application de la directive, pour appeler la fonction:..

<div my-directive callback-fn="ctrlFn(arg1)"></div> 


app.directive('myDirective', function() { 
    return { 
     scope: { someCtrlFn: '&callbackFn' }, 
     link: function(scope, element, attrs) { 
      scope.someCtrlFn({arg1: 22}); 
     }, 
    } 
}); 


function MyCtrl($scope) { 
    $scope.ctrlFn = function(test) { 
     console.log(test); 
    } 
} 
+0

J'ai mis à jour mon code. S'il vous plaît tester votre côté. –