【发布时间】:2017-05-24 03:35:02
【问题描述】:
我无法使从父组件的 ng-repeat 循环的项目可用于嵌套组件的范围。父组件是一个包含许多项目组件的轮播。轮播由 ng-repeat 填充。我希望能够访问项目控制器(“it”)中的“项目”和轮播控制器(“cr”)的方法。我想我正在以完全错误的方式解决这个问题。感谢是否有人可以指导我。
carousel.component.html
<slick <!--slick attributes--> >
<div ng-repeat="item in cr.items">
<item-component></item-component>
</div>
</slick>
carousel.component.js
class CarouselController{
constructor(/*stuff*/){
'ngInject';
this.items =[
{"something":"The thing 1","otherthing":"The other thing 1"},
{"something":"The thing 2","otherthing":"The other thing 2"},
{"something":"The thing 3","otherthing":"The other thing 3"}
];
}
parentFunctionToCall(item){
console.log('I called a function on the parent!',item)
}
/*other stuff*/
}
export const CarouselComponent = {
templateUrl: './views/app/components/carousel/carousel.component.html',
controller: CarouselController,
controllerAs: 'cr',
bindings: {
}
}
item.component.html
<div data-something="{{item.something}}">
Yo,{{item.otherthing}}!
</div>
<a href="#" ng-click="cr.parentFunctionToCall(item)">
Trying to call a function on the parent component
</a>
item.component.js
class ItemController{
constructor($scope,/*stuff*/){
'ngInject';
//$scope.it.item & $scope.it.cr are both undefined
console.log(this);
//I understand this is the incorrect way but it works
this.$scope.item = this.$scope.$parent.item;
console.log(this);
}
/*other stuff*/
}
export const ItemComponent = {
templateUrl: './views/app/components/carousel/item.component.html',
controller: ItemController,
controllerAs: 'it',
bindings: {
"item":"=",//i can see this as undefined $scope in ItemController
"cr":"=" //i want to access a method on the parent controller
}
}
这表明发生了什么... https://plnkr.co/edit/UG20EtI4KxnVnTe8zzz4?p=preview
【问题讨论】:
-
请将您的代码更新为有效的 sn-p,我很乐意看看。
-
@PhilPoore 来了,非常感谢
-
@PhilPoore 如果您的报价仍然有效 - plnkr.co/edit/UG20EtI4KxnVnTe8zzz4?p=preview
标签: javascript angularjs binding