When apply angular syntax {{}} on element, directive attrs.$set will not work. 
Edit: My question is could anyone explain why?
If {{}} parsed and then link, why wouldn't the element been modified by link? 
If link first, {{}} should be removed, both condition will not result like this.
Here is the code pen
<div ng-app="ngApp" ng-controller="global">
  <a aaa href="http://{{::lan}}/4567">has syntax</a>
  <a aaa href="http://nosyntax/4567">no syntax</a>
</div>
angular.module('ngApp',[])
  .directive('aaa',function(){
  return {
    link:function(scope, ele, attr){
      attr.$set('href','http://fromdirective');
    }
  }
}).controller('global',function($scope){
  $scope.lan = 'en-gb';
})
 
     
     
     
    