Przekazanie funckji z kontrolera do dyrektyw

0

Cześć,

mam zagwostkę z AngularJS, a dokładniej przekazuję funkcję z kontrolera do dyrektywy, ale nie mogę jej pobrać w dyrektywie.

 <div my-directive="aliasCtrl.myFunction(boolean)"></div>

Chcę przekazać funkcję i w zależności co zwróci true czy false zrobić modyfikację na DOM'ie.
Jak mogę tę funkcję odebrać w dyrektywie i sprawdzić wynik jej wywołania?

Ciało dyrektywy:

 ...
return {
restrict: 'ACE',
scope: {
funInside: '&'
},
link: function(){ 
???
} 

Bardzo proszę o pomoc.

0

Ty chcesz zrobic callbacka do controllera, czy controller jest w hierarchii wyzej od tej dyrektywy? bo jak tak to mozesz zrobic require w dyrektywie i wtedy value tego require bedzie "dyrektywa" albo "?dyrektywa" jak wolisz. No albo mozesz zrobic $broadcast, ale uwazam ze do takich przypadkow to require jest o wiele lepsze

0

Możesz jaśniej?
Jestem początkujący z Angularem.

0

Tutaj masz dwa sposoby. Z gory w dol oraz z dolu w gore.

// z gory w dol
<div ng-app="myApp">
<div ng-controller="MyCtrl">
  <button ng-click="toggle()">
    Click
  </button>
  <div some-directive show="show"> </div>
</div>
</div>
 
var myApp = angular.module('myApp',[]);


function MyCtrl($scope){
	$scope.show = false;
  $scope.toggle = function(){
    $scope.show = !$scope.show;
    console.log($scope.show);
  }
}

angular.module("myApp").directive("someDirective",function(){
	return {
  	    restrict: 'EA',
        scope:{
        	show:"="
        },
        template:"<h1 ng-show='show'>Hello</h1>",
        link: function(scope, element, attrs, controller) {

    	}
    }
  });
  
  
 
// z dolu w gore
<div ng-app="myApp">
  <div ng-controller="AppCtrl">
  <h1 ng-show="show">
   Show Text
  </h1>
  <div some-directive show="showDiv(bool)"></div>
  </div>
</div>
 
var myApp = angular.module('myApp', []);

myApp.controller("AppCtrl", function ($scope) {
	$scope.show = false;
  $scope.showDiv = function (bool) {
    $scope.show = bool;
  };
});

myApp.directive("someDirective", function () {
  return {
  	restrict:'EA',
    scope: {
      show: "&"
    },
    template: '<button ng-click="show({bool:true})">Click me</button>',
  };
});
  
 
0

Dziękuję za odpowiedź, ale mój przykład jest minimalnie inny. Od razu do dyrektywy jest przypisana funkcja z kontrolera, a Ty podałeś inaczej. Domyślam, że jednak to działa tak samo.
A jak mogę nasłuchiwać zmian w zależności czy zwróci true czy false?

1 użytkowników online, w tym zalogowanych: 0, gości: 1