我有这段代码:
<span data-icon="{{table.addIcon || ''}}"></span>
该跨度会创建一个这样的图标:
但是,我想让开发人员使用这个指令,可以定义一个新图标。然而,它正在发挥作用,假设我有这个:
$scope.table.addIcon = ""
而不是创建元素
<span data-icon=""></span>
它会创建它
<span data-icon="&#xe070;"></span>
将无法添加图标,因此不会看到此内容:
我拥有的是:
有没有办法避免角度将&
转换为&
?
添加解决方案
感谢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 || ''}}"></span>
答案 0 :(得分:1)
我已经创建了一个示例jsfiddle来试验您描述的问题,但我可能遗漏了一些内容。
我怀疑您看到的是&
而不是&
,因为该视图在服务器上进行了html编码。
无论哪种方式,在javascript中decode html entities相当容易。请考虑以下示例:
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希望它有助于解决你的问题。