我想将HTML作为属性注入模板,并将其显示在传递属性的指令中。
我的HTML
<!DOCTYPE html>
<html>
<head>
<script data-require="angular.js@*" data-semver="1.4.0-rc.0" src="https://code.angularjs.org/1.4.0-rc.0/angular.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body ng-app="app">
<div>
<my-test mymessage='<b>Booya!</b>'></my-test>
</div>
</body>
</html>
我的Javascript
app = angular.module('app', [])
.directive("myTest", function(){
return {
scope: {
mymessage: '='
},
restrict: 'E',
transclude: true,
template: '<p>Guess what...{{mymessage}}...you know it!</p>'
};
});
以下是Plunker中的代码:http://plnkr.co/edit/ZJSkf1Ye4ccKURTJU8KD?p=preview
请注意它如何显示绑定的文字。
我确定这里有几个问题:
为了使指令正确呈现,我需要做出哪些更改?
答案 0 :(得分:2)
如果您绑定的HTML没有Angular代码(表达式和指令),那么您需要使用ng-bind-html
:
scope: {
mymessage: "@" // no need for two-way binding
},
template: '<p>Guess what...<span ng-bind-html="mymessage"></span>...you know it!</p>'
这本身就不起作用,因为它不安全。您有两种选择:
1)在您的应用中加入ngSanitize
依赖:
angular.module("app", ["ngSanitize"])
这会自动应用HTML环境保护 - Demo
或,2)使用$sce
服务并在包含HTML内容的变量上调用$sce.trustAsHtml
。但这不起作用,但使用单向字符串绑定"@"
。