Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AngularJS - Refresh Directive from controller

i've a directive that include an HTML file based on a scope variable. When HTML is loaded first time all is good. But when scope variable change by ng-clic i'm not able to recall directive.

Here is my directive:

my.directive('myType', function() {
return {
    restrict: 'A',
    replace: true,
    link: function($scope, element, attrs) {          
          var myHTML;
          if ($scope.aType==1) myHTML = "aaaa";
          if ($scope.aType==2) myHTML = "bbbb"; 

          $scope.contentUrl = 'library/template/tmp-' + myHTML + '.html';
    },
    template: '<div ng-include="contentUrl"></div>'
}});

$scope.aType is scope variable that change on ng-click. Thanks in advance.

like image 203
user1683405 Avatar asked Feb 11 '23 09:02

user1683405


2 Answers

You need to add a watch on aType or some kind of event to make you code run more than once(on linking):

something like this:

link: function($scope, element, attrs) {       
         $scope.$watch('aType', function(newVal, oldVal){
                   var myHTML;
                   if ($scope.aType==1) myHTML = "aaaa";
                   if ($scope.aType==2) myHTML = "bbbb"; 
                   $scope.contentUrl = 'library/template/tmp-' + myHTML + '.html';
         });   
    }

JSFIDDLE.

like image 140
Amir Popovich Avatar answered Feb 12 '23 23:02

Amir Popovich


I would avoid using $watch() if you can, which you almost always can. You can always setup ng-click to pass variables from your directive to your controller, or modify @Amir Popovich's answer to do the logic in your controller, and not in the link function.

For an example on how to access methods in a directive from a controller check out: Access parent controller methods from directive?

like image 36
Fred Avatar answered Feb 12 '23 21:02

Fred