我有这样一个需求:ChartController会生成变量,将数值赋给p的id,然后GraphController中用到p的id变量,但是GraphController中的方法需要p的id已被渲染才行。
<p ng-controller="ChartController">
<p ng-repeat="id in chart.id">
<p id="{{ id.value }}" ng-controller="GraphController"><p>
<p>
</p>
如果GraphController的xx方法被调用的时候,我查看前端的代码,p的id名称还是
<p id="{{ id.value }}"...
去除ng-controller="GraphController"后,发现p的id渲染正确
<p id="abc123"...
很奇怪!
ringa_lee2017-04-10 13:13:45
我不建议将angular的模板语言直接放在id或者class这些属性里,可以用ng-class,ng-href,ng-src这些属性代替。
angular里的controller不是类,不能用类似楼主那样的方法直接从一个controller里新建多个类并传值给它们。
楼主需要的是directive
<p ng-controller="ChartController">
<p ng-repeat="id in chart.id">
<graph graph-id="id.value"></graph>
<p>
</p>
app.directive("graph",function(){
return {
template: '<p>{{id}}</p>',
scope:{
//注意这里
//如果是'@graphId'的话,则返回的是字符串"id.value"
//graphId对应的html属性为"graph-id"
id:'=graphId'
},
restrict:'E',
controller:function($scope){
console.log($scope.id);
//abc123
//将GraphController的代码放在这里
}
}
})
http://plnkr.co/edit/M1gtlySErXvSOgQayxF6?p=preview
关于directive,看这里