2016-11-29 73 views
1

我试图创建一个菜单,允许某些用户访问某些内容:角 - 我的功能是在一个无限循环中运行

HTML

<ul class="dropdown-menu"> 
     <li><a href="/local" >Local</a></li> 
     <li><a href="/fazenda" ng-class = "{botaodisabled:botoes('Fazenda')}">Fazenda</a></li> 
     <li><a href="/gleba">Gleba</a></li> 

在此示例'Fazenda'将检查如果用户将要访问功能botoes('Fazenda')以外的功能。最后,菜单中的所有项目都将获得此功能以检查用户是否有权访问它。问题是我的函数不会为菜单的每个项目运行一次,从而造成无限循环。

角:

$scope.botoes = function(nome) { 
     console.log(nome);   
     $http.get('/botaopermissao/'+nome).success(function(data) {  
      console.log(data);  

      if(data == "Encontrado!"){ 
       return true; 
      }else{ 
       return false; 
      } 
     }); 
    } 
+1

'$ http.get'是异步的,您必须使用立即返回true/false的函数。更不用说,你不能从异步请求返回任何东西 – Tomer

+2

这将触发**每**消化周期!不要这样做!只需创建一个'$ scope'属性,并在控制器 – devqon

+1

中初始化,不再使用'.success()',而应该使用'.then()'。 – Claies

回答

0
function(nome) { 
    console.log(nome);   
    $http.get('/botaopermissao/'+nome).success(function(data) {  
     console.log(data);  

     if(data == "Encontrado!"){ 
      $scope.botoa= "what you want"; 
     } 
     } 
    }); 
} 

因为你的方法是在每一个周期,这可能会导致一个无限重复,所以这将是更好地使用您的控制器范围内触发。