点击时递归添加新的指令实例
Add new directive instance recursively on click
我试图创建一个Angular指令,通过点击元素递归地填充数据(通过$http加载)。一开始应该只有一个按钮。单击按钮后,通过$http从远程源加载数据,创建、编译并将每个子指令的新实例附加到父实例中。这些子指令也是按钮,应该加载和附加它们的子数据,也就是说,孙子被嵌套到子指令中,等等。
下面的代码正确加载并追加了第一个子指令,但是点击追加的指令会创建新的指令,这些指令会追加到根指令。似乎element.append()总是指向根。
有人知道我哪里错了吗?
app.directive('sectionloader',['$compile', 'sectionService', '$http',
function($compile, sectionService, $http){
return {
restrict : 'E',
template: '<button>loadSection</button><br>',
scope : {sectionId:'@'},
terminal: false,
link: function link(scope, element, attrs) {
element.bind('click', function(){
sectionService.loadBySectionId(attrs.sectionId, function(data){
var sectionHtmlLocation = "http://remoteserver/sectionhtml.html"
scope.section=data;
scope.subsections = [];
data.subsections.forEach(function(id){
sectionService.loadBySectionId(id,function(data){
scope.subsections.push(data);
});
});
$http.get(sectionHtmlLocation).success(function(data){
var compiledData = $compile(data)(scope.$new());
element.append(compiledData);
});
});
});
}
}
}]);
编译和附加的模板为:
<div class="subsections">
<ul>
<li ng-repeat="subsection in subsections">
{{subsection.sectionName}}
<sectionloader sectionid="{{subsection.sectionId}}"></sectionloader>
</li>
<ul>
</div>
看看你是如何绑定clink事件的。您可能没有在预期的源处捕获事件,然后它将向上传播到父节点……
用ng-click
替换bind
可以解决问题。
<button ng-click="load();">loadSection</button>
>>
> $scope.load = function(){
...
}
相关文章:
- 如何在另一个组件中获取指令/组件实例
- 如何在angularJS中获得对指令对象实例的引用
- 在运行时创建指令的实例
- 同一指令的多个角度实例,作用域不是孤立的
- 剑道网格:在Angular指令中获取一个实例
- 以控制器为语法的多个angularjs指令实例
- 为什么在删除指令之后“;人;类的实例仍然存在
- 在键盘按下时对特定指令实例进行函数调用
- 从控制器调用特定指令实例的函数
- 从指令 AngujarJs 实例化映射
- 从控制器中的 ng-sortable 指令获取可排序实例
- 是否可以从指令定义内部访问指令的实例
- 指令实例共享Ajax结果,但我不希望它们共享
- 通过公共属性绑定指令实例
- 点击时递归添加新的指令实例
- Angular指令实例$watch不起作用
- 在AngularJS中与指令实例通信
- 为angular指令实例分配自定义的唯一id
- 访问与指令实例关联的控制器
- Angularjs - 使用指令实例化其他指令