我有:
<div ng-controller="fooControlle as fc">
<div ng-repeat"fooObj in fc.fooCollection">
<div ng-controller="barController as bc" ng-init="bc.init()">
bc output here
</div>
</div>
</div>
我需要从bc.init()访问fooObj。
我试过了:
ng-init="bc.init(fooObj)"
但fooObj未知。
通过我的init函数使用$ parent,我会看到我的收藏,但不会知道哪一个是我当前的项目。
有什么想法? 提前谢谢。
答案 0 :(得分:1)
我建议您将$index
与$parent.fooObj
一起传递,以便跟踪您在哪个元素
<div ng-controller="fooControlle as fc">
<div ng-repeat"fooObj in fc.fooCollection">
<div ng-controller="barController as bc" ng-init="bc.init($parent.fooObj, $parent.$index)">
bc output here
</div>
</div>
</div>
为了让它更好,你的fooObj应该有一个独特的值,可以区分它,就像你应该有像fooObj = {id: 1, .....}
答案 1 :(得分:0)
个人而言,easiet将为barController部分创建一个指令,并将fooObj作为参数传递给指令
app.directive("foo", [function(){
return {
restrict: "E",
controller: "barController",
templateUrl: "",
scope: {
bar: "="
}
};
}]);
然后你的html可能是
<div ng-controller="fooControlle as fc">
<div ng-repeat"fooObj in fc.fooCollection">
<foo bar="fooObj"></foo>
</div>
</div>
答案 2 :(得分:0)
谢谢你们的回答。 Pankaj,你告诉我的方式:)
最后它很简单,有两个选项:
ng-init="bc.init($parent.fooObj)"
或
var init = function(){
var foo = $parent.fooObj
}
第二种方式显然更清晰,因为当你可以从函数中以相同的方式访问它时,通过参数发送值没有附加价值。
这里的关键是我误解了 $ parent 在这里的内容。当它是ng-repeat 当前迭代上下文时,我认为是父控制器上下文。
感谢您的协助。