【发布时间】:2017-04-25 14:44:15
【问题描述】:
我正在尝试使用 angular 呈现表示自定义指令的 html,以便我可以嵌套 div 任意次数。当我运行下面的代码时,我确实看到标签被正确嵌入,并且我的输出中的浏览器按字面意思显示字符串文本“”。我想将它编译成 html 并渲染并尝试在下面使用
$compile(element.contents())(scope);
但是,这会导致有关孤立嵌入的控制台错误以及说它无法读取我的对象的属性的错误。我认为这是编译成我不希望它编译的东西,但不确定为什么或如何看到结果是什么。有什么想法让我去这里吗?有没有更好的角度来做到这一点?
带有指令的模块
angular.module('myApp.APP', ['ngRoute'])
.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/testapp', {
templateUrl: 'javascripts/nestedExample/testHTML.html',
controller: 'testController'
});
}])
.controller('testController', ['$scope', '$http', '$sce', function($scope, $http, $sce) {
$scope.paneDirective = "<div pane> </div>";
}])
.directive('pane', function($compile) {
return {
scope: {},
template: "<div data-split-pane> <div data-split-pane-component data-width='33%'><p>top</p></div><div data-split-pane-divider data-width='5px'></div> <div data-split-pane-component> <ng-transclude></ng-transclude> <p>bottom</p></div></div>",
transclude: true,
link: function(scope, element, attrs) {
console.log(element.contents())
//$compile(element.contents())(scope);
},
};
});
简化的 html
<div ng-controller="testController">
<div pane> {{paneDirective}} </div>
</div>
编辑模板中使用的格式化 html 代码
<div data-split-pane>
<div data-split-pane-component data-width='33%'>
<p>top</p>
</div>
<div data-split-pane-divider data-width='5px'></div>
<div data-split-pane-component>
<ng-transclude></ng-transclude>
<p>bottom</p>
</div>
</div>
【问题讨论】:
标签: javascript angularjs angular-directive angularjs-ng-transclude transclusion