我尝试使用角度组件替换指令来创建组件(数据表)。 我想使用ng-repeat中的组件,如:
<div ng-repeat='item in items'>
<my-datatable></my-datatable>
</div>
my-datatable组件代码如下所示:
angular.module('App').component('myDatatable', {
bindings: {
ctrl: '=?',
datasource: '=?'
},
bindToController: true,
controllerAs: 'dataTable',
template: function(){},
controller: function(){}
});
第一个问题: 1.对于my-datatable组件的每个实例,模板函数都不是runnig。 这意味着,如果在my-datatable中我有基于my-datatable的唯一Id生成的其他组件(可以仅在控制器中创建),则很难编写该代码。 2.嵌套隔离范围,创建o太长的$ parent链,用于引用某个范围变量,如下所示(如果我使用两个嵌套的my-datatable):
ng-click="$parent.$parent.$parent.$parent.$parent.$parent.$parent.$parent.select($parent.$parent.$parent.$parent.dataItem,dataItem)"
所以,我的问题是: 这是一种使用角度分量来避免这个问题的方法吗?
使用没有隔离范围的指令编写控件代码,我没有这个问题。这就是为什么我想将所有角度组件的代码更改为指令。
我开始将may组件转换为指令,我记得很少:
这意味着,在模板函数中为每个组件实例生成唯一ID仍然只是问题。 换句话说:如何在每个组件实例上运行模板功能。
举例说明: https://jsfiddle.net/bogdanim36/t3gmzb6z/3/
并进行了一些测试,我发现在ng-repeat内部的指令也是如此:模板函数没有为每个组件实例运行。
答案 0 :(得分:0)
最后我在控制器中生成html代码,以解决这个问题,这意味着一个更多的摘要周期。不是我想要的,但我认为这是我个案中最好的解决方案。