AngularJS - Refresh Directive from controller
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';
});
}
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?
Related videos on Youtube
user1683405
Updated on June 13, 2022Comments
-
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 about 9 yearsThanks Amir. But now also first time template doesn't load (directive don't call ng-include in template)