2014-08-28 3 views
3

У меня есть этот код:Binding атрибут HTML в angularjs

<span data-icon="{{table.addIcon || '&#xe603;'}}"></span> 

Этот промежуток создает значок, как это:

Plus icon

Однако я хочу, чтобы дать разработчику, используя эту директиву, то возможность определить новый значок. Это работает, однако, проблема у меня есть, что, предполагая, что у меня есть это:

$scope.table.addIcon = "&#xe070;" 

Вместо создания элемента

<span data-icon="&#xe070;"></span> 

создаст его

<span data-icon="&amp;#xe070;"></span> 

Что будет не удается добавить значок, поэтому вместо этого:

What I should have...

Что у меня есть это:

What I do have :(

Есть ли способ, чтобы избежать угловатых преобразовать & в &amp;?

добавления раствора

Благодаря miensol решения заключается в следующем:

.directive("changeIcon", function() { 
    var d = document.createElement("div"); 
    return { 
     restrict: "A", 
     link: function($scope, $ele, $attrs) { 
      log($attrs); 
      var originalIcon; 
      $scope.decodedIcon = $attrs.icon; 
      do { 
       originalIcon = $scope.decodedIcon; 
       d.innerHTML = originalIcon; 
       $scope.decodedIcon = d.firstChild.nodeValue; 
      } while (originalIcon != $scope.decodedIcon); 
      $attrs.$set('data-icon', $scope.decodedIcon); 
     } 
    } 
}) 

И он используется так:

<span change-icon icon="{{table.addIcon || '&#xe603;'}}"></span> 

ответ

1

Я создал образец jsfiddle попробовать вы описали проблему, но я, вероятно, что-то пропустил.

Я подозреваю, что вы видите &amp; вместо &, потому что мнение HTML кодируются на сервере.

В любом случае это довольно легко decode html entities в javascript. Рассмотрим следующий пример:

m.directive('icon', function(){ 
    var div = document.createElement('div'); 

    return { 
     scope: { 
      icon:'=' 
     }, 
     link: function($scope,$element,$attrs){    
      var originalIcon; 
      $scope.decodedIcon = $scope.icon; 
      do { 
       originalIcon = $scope.decodedIcon; 
       div.innerHTML = originalIcon; 
       $scope.decodedIcon = div.firstChild.nodeValue; 
      } while (originalIcon != $scope.decodedIcon); 
      console.log('data-icon', $scope.decodedIcon); 
      $attrs.$set('data-icon', $scope.decodedIcon); 
     } 
    }; 
}); 

Вы можете играть с ним вокруг here надеюсь, что это поможет решить вашу проблему.

+0

Большое спасибо за информацию. Собственно, если вы проверите первый jsfiddle, вы увидите, что он закодирован, а второй делает именно то, что мне нужно. Я попробую. Благодаря! – Cito

Смежные вопросы