2014-12-13 41 views
0

我的HTML不能从子控制器存取权限父控制器的方法

<section class="localsContainer" ng-controller="LocalsCtrl"> 
    <h3>Lokale</h3> 
    <div class="placesProgress"></div> 
    <ul> 
     <li ng-repeat="city in cities"> 
      <p ng-show="city.LocalCount > 0" ng-click="getLocals(city.Id)">{{city.Name}}</p> 
      <ul ng-show="activeCityLeft === city.Id"> 
       <li ng-repeat="local in locals[city.Id]"> 
        <p>{{local.Name}} ng-click="getDetails()"</p> 
       </li> 
      </ul> 
     </li> 
     <li ng-if="cities.length == 0"> 
      <strong>Nie znaleziono</strong> 
     </li> 
    </ul> 
</section> 

和js

angular.module('sandboxApp') 
    .controller('MainCtrl', function ($scope, API) { 
     API.newRequest('getCitiesList').success(function (data, status, headers, config) { 
      $scope.cities = data.data; 
     }); 
     $scope.getDetails = function() { 
      console.log("test") 
     }; 
    }) 
    .controller('LocalsCtrl', function ($scope, API) { 
     $scope.locals = {}; 

     $scope.getLocals = function (cityid) { 
      $scope.activeCityLeft = cityid; 
      API.newRequest('getLocalList', { params: { 'city_id': cityid.toString() }, cache: true }).success(function (data, status, headers, config) { 
       $scope.locals[cityid] = data.data; 
      }); 
     }; 
    }) 

如果我理解正确的话,我应该能够援引“getDetails”的方法在任何地方,因为它是在主控制器上定义,即使是获取其控制器的元素,但嵌套在与主控制器相连的元素中。但它不起作用,当我点击应该调用getDetails的元素,而是显示'ng-click ='getDetails()'作为html文本。

+0

属性必须的元素,例如上'

' – Clive 2014-12-13 12:14:33

回答

2

您的ng-click定义错误 - 您将其定义为文本一个<p>元素:

<p>{{local.Name}} ng-click="getDetails()"</p> 

你应该把它定义为一个属性,因为它是一个指令:

<p ng-click="getDetails()">{{local.Name}}</p> 
+0

是的,愚蠢的错误,感谢您的帮助。 – user3561092 2014-12-13 12:15:51

+0

@ user3561092随时都会发生......很乐意提供帮助。 – 2014-12-13 15:08:01

2

使用,因为它是指导和指令(属性)的属性NG单击使用类似的属性,您将显示为文本

see refrence为NG单击

<p ng-click="getDetails()">{{local.Name}} </p>