【问题标题】:Binding HTML attribute in angularjs在angularjs中绑定HTML属性
【发布时间】:2014-10-22 09:06:05
【问题描述】:

我有这个代码:

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

该跨度创建一个像这样的图标:

但是,我想为使用此指令的开发人员提供定义新图标的可能性。它正在工作,但是,我遇到的问题是,假设我有这个:

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

而不是创建元素

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

它会创建它

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

这将无法添加图标,所以不要看到这个:

我拥有的是这样的:

有没有办法避免角度将&amp;amp; 转换为&amp;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>

【问题讨论】:

    标签: javascript angularjs ng-bind-html


    【解决方案1】:

    我创建了一个示例 jsfiddle 来尝试您描述的问题,但我可能遗漏了一些东西。

    我怀疑您看到的是&amp;amp; 而不是&amp;,因为视图是服务器上的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希望它能帮助你解决问题。

    【讨论】:

    • 非常感谢您的信息。实际上,如果您检查第一个 jsfiddle,您会看到它已编码,但第二个正是我需要的。我会试试看。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 2014-10-05
    • 2016-01-21
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多