AngularJS - Refresh Directive from controller

15,966

Solution 1

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.

Solution 2

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?

Share:
15,966

Related videos on Youtube

user1683405
Author by

user1683405

Updated on June 13, 2022

Comments

  • user1683405
    user1683405 about 2 years

    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.

  • user1683405
    user1683405 about 9 years
    Thanks Amir. But now also first time template doesn't load (directive don't call ng-include in template)