我已经开发了一个transclude指令,我将它设置为使用angularjs模板脚本,一切正常,但我仍然无法访问绑定数据。
我的代码:
的index.html
<div side-element="box" title="Links">
<ul>
<li>Link 1</li>
<li>Link 2</li>
</ul>
</div>
<script id="box" type="text/ng-template">
<div class="side-box">
<div class="content">
<h2 class="header">Box {{ title }}</h2>
<span class="content" ng-transclude></span>
</div>
</div>
</script>
<script id="ad" type="text/ng-template">
<div class="side-ad">
<div class="content">
<h2 class="header">AD {{ title }}</h2>
<span class="content" ng-transclude></span>
</div>
</div>
</script>
app.js:
angular.module('myApp.directives')
.directive('sideElement', function ($templateCache, $log) {
return {
scope: {
title: '@'
},
transclude: 'element',
link: function(scope, element, attrs, ctrl, transclude){
var template = $templateCache.get(attrs.sideElement);
var templateElement = angular.element(template);
$log.info(scope.title);//Output the title i put in the html which is (Links)
transclude(scope, function(clone){
element.after(templateElement.append(clone));
});
}
};
});
链接函数(....)中的范围取代了正确的标题,但它在html中不起作用:
Box {{title}}
链接1 链接2
我想我错过了一件事,但我无法弄明白,我需要你的帮助来完成这个循环。
提前完成,
答案 0 :(得分:2)
必须首先编译包含角度绑定表达式的模板元素,然后进行链接。编译阶段准备模板,而链接阶段为您的绑定表达式设置$ watchers。
这是一个应该有效的编译函数:
.directive('sideElement', function ($templateCache, $compile, $log) {
return {
restrict: 'A',
transclude: true,
scope:'@',
compile: function(element, attrs) {
var template = $templateCache.get(attrs.sideElement);
var templateElement = angular.element(template);
element.append(templateElement);
return function(scope, element, attr, ctrl, transclude) {
$log.info(scope.title);
}
}
}