2016-07-01 3 views
0

У меня есть нг-если проверка доступа пользователей к определенным ссылкам в моем угловом приложении:Угловая функция непрерывно называется

<li ng-if="hasAccess('admin')"><a href="#/admin">admin</a></li>

В моем угловом приложении .run, я добавил функция rootscope:

$rootScope.hasAccess = function (type) { 
     if ($rootScope.me && $rootScope.me.groups) { 
      return $rootScope.me.groups.filter(function (group) { 
       return group.id === type; 
      }).length > 0; 
     } else { 
      console.log(type + ' cannot be verified. $rootScope.me has not been set'); 
     } 
    }; 

Иногда эта функция бесконечно называется (я принимаю через циклы дайджестов), но я не знаю, почему.

+0

ng-if = "getAccess ('admin')" или ng-if = "hasAccess (' админ) "? –

+0

@ Growler Я бы рекомендовал пойти с решением hitmands, каждый раз, когда страница загружается, он вызывает метод. Попросите метод при вызове init вашего контроллера и получить к нему доступ как логическое значение в ng-if –

+0

@ThillaiNarayanan, что о единовременной привязке? '

He is Admin
' –

ответ

2

Эта функция непрерывно называется, потому что директива ngIf оценивается на каждом Digest цикла ...

Если вы хотите EXEC эту функцию только один раз попробовать это:

$rootScope.hasAccess = function (type) { 
 
    if ($rootScope.me && $rootScope.me.groups) { 
 
    return $rootScope.me.groups.filter(function (group) { 
 
     return group.id === type; 
 
    }).length > 0; 
 
    } else { 
 
    console.log(type + ' cannot be verified. $rootScope.me has not been set'); 
 
    } 
 
}; 
 
$rootScope.hasAdminAccess = $rootScope.hasAccess('admin');
<div ng-if="hasAdminAccess">He is Admin</div>

+0

, есть нативное угловое решение - однократное связывание: '

He is Admin
' –