尽管有$ scene . trustashhtml (), Angularjs还是不信任自定义指令中的HTML
Angularjs not trusting HTML in custom directive despite $sce.trustAsHtml()
我正在学习AngularJS。我试图创建一个自定义指令,实现一个选项卡笔记本,与页面。这是在JSFiddle上。
http://jsfiddle.net/kdtop/rxuchg1t/在标签2上,可以看到:"Content [B]for[/B]标签2"。即[B] [/B]标签不呈现。
这里是指令的定义,我尝试使用$ scene . trustashhtml ():
MyApp.directive('tmgTabsCtrl', ['$sce', function ($sce) {
return {
restrict: 'E',
require: '?tabControl',
scope: {
tabControl: '=',
},
template: ' '
<BR> '
<ul class="nav nav-tabs"> '
<li ng-repeat="i in range(0, tabControl.Tabs.Count()-1)" '
ng-class="{active: tabControl.IsSelected(i)}" '
ng-click="alert(''test'')" > '
<a href="#{{i}}" ng-click="ToggleActive(i)">{{tabControl.TabName(i)}}</a> '
</li> '
</ul> '
<div class="tab-content"> '
{{trustAsHtml(tabControl.TabContent()) }} '
</div> ',
link: function (scope, el, attrs) {
scope.range = RangeFn;
scope.ToggleActive = function (Index) {
scope.tabControl.Select(Index);
};
scope.trustAsHtml = function (Html) {
return $sce.trustAsHtml(Html);
};
}
};
}]);
我的最终目标是允许tabControl.Content()函数返回文本与HTML将所有类型的HTML,包括其他自定义指令作为web组件的形式。
我需要$compile()文本吗?我做错了什么?
我试着回顾了StackOverflow链接的其他问题,但我找不到我问题的答案。
我明白了。我不知道为什么我的第一个方法不起作用,但下面是一个有效的方法。
一般的想法是templateURL中的Html创建一个DOM元素来保存选项卡内容。当用户单击不同的选项卡时,该元素被检索,然后使用jquery的功能进行修改,例如element.html()函数。然后,Angular会被要求扫描html,并通过$compile(element)(scope)使其具有交互性。希望这能帮助到别人。我仍然希望有人能解释为什么使用。trustashhtml()方法不工作.....
MyApp.directive('tmgTabs', ['$sce', '$compile', '$timeout', function ($sce, $compile, $timeout) {
var DirectiveObj = {
restrict: 'E',
require: '?tabControl',
scope: {
tabControl: '=',
},
templateUrl: 'part/tab_part.html',
link: function(scope, element, attrs){
scope.range = RangeFn;
scope.CompileContent = function(HtmlStr) {
var el = $("#TMG-TAB-"+scope.tabControl.InstanceID+"-CONTENT"); //jquery object
el.html(HtmlStr);
$compile(el)(scope);
};
scope.DisplayContent = function() {
scope.CompileContent(scope.tabControl.TabContent());
};
scope.ToggleActive = function(Index){
scope.tabControl.Select(Index);
scope.DisplayContent();
};
$timeout(function() {
scope.ToggleActive(0); //needs to be done after link() finishes.
});
}
};
return DirectiveObj;
}]);
这里是tab_part。html
<BR>
<ul class="nav nav-tabs">
<li ng-repeat="i in range(0, tabControl.Tabs.Count()-1)"
ng-class="{active: tabControl.IsSelected(i)}" >
<a ng-click="ToggleActive(i)">{{tabControl.TabName(i)}}</a>
</li>
</ul>
<span id={{"TMG-TAB-"+tabControl.InstanceID+"-CONTENT"}}>
<!-- User content will be inserted here-->
</span>
这是一个使用的例子。
<div ng-app="MyApp" ng-controller="MyAppController">
<tmg-tabs tab-control="DemoTabs"></tmg-tabs>
</div>
相关文章:
- Dojo不解析自定义小部件的模板html中的小部件声明性
- 不使用自定义CSS或HTML(使用框架方法)的角度材质文本输入或文本区域标签大小
- 为什么PHP文件不用于(自定义)CSS和JS
- ng如果初始动画不使用自定义指令
- 找不到自定义jQuery插件
- 如果未选中,则 js 复选框不设置自定义值
- KendoUI 使用图标而不是自定义命令的按钮
- 聚合物查询选择器在聚合物元素中找不到自定义聚合物元素
- Breezejs ComplexType 不执行自定义初始值设定项函数
- 未捕获的类型错误:$ 不是自定义 WP javascript 中的函数
- 如果选择了特定选项,则不应用自定义 JQuery 验证
- Webkit 在使元素可见后不呈现自定义滚动条
- Jquery .siblings() 不使用自定义属性
- 未捕获类型错误号不是自定义小部件的函数
- Angular Material ng单击不在自定义指令中工作
- 有角度的路由器嵌套状态不继承自定义数据
- 用原生移动字体而不是自定义字体加载网站的最佳方式
- jQuery赢得'找不到自定义标记
- 尽管有$ scene . trustashhtml (), Angularjs还是不信任自定义指令中的HTML
- jQuery ajax加载函数不包含自定义javascript文件