如何访问子控制器中的当前集合项?

时间:2012-10-17 14:43:10

标签: angularjs

控制器:

var ProductsCtrl = function ($scope) {
  $scope.products = [ {name: 'one'}, {name: 'two'}, {name:'three'} ];
};

var ProductCtrl = function ($scope) {
  $scope. // How do I access the current product name?
};

视图:

<ul ng-controller='ProductsCtrl'>
  <li ng-repeat='product in products' ng-controller='ProductCtrl'>
  </li>
</ul>

2 个答案:

答案 0 :(得分:2)

在您的案例中,当前产品可在“产品”范围内访问。

如果你重复这样的话:

ng-repeat =“项目中的项目”您的子控制器将在范围内具有“项目”。

所以在你的例子中:

<ul ng-controller='ProductsCtrl'>
  <li ng-repeat='product in products' ng-controller='ProductCtrl'>
    {{product.name}}
  </li>
</ul>

答案 1 :(得分:1)

@ganaraj已经提供了正确的答案。 但我想指出,在您的示例中,您可能不需要在&lt; li&gt;中声明控制器。元件。每个产品的ng-repeat创建的子范围都可以访问ProductCtrl控制器。你应该只需要

<li ng-repeat='product in products'>

另见Understanding the Controller Component页面上的“Controller Inheritance Example”部分。

你可以在ProdctsCtrl的$ scope中添加带有product参数的方法,然后可以在ng-repeat中调用它。例如,在您的控制器中:

var ProductsCtrl = function ($scope) {
   ...
   $scope.totalPrice = function(product) {
      return product.price * product.quantity;
   }
}

在您的HTML中:

<li ng-repeat='product in products'>
   total cost = {{totalPrice(product)}}
</li>