2015-08-04 3 views
1
$scope.checkbit = undefined; 
$scope.showHide = function(permissionrequired){ 
for(var i=0; i< userpermissions.length; i++){ 
    console.log(userpermissions[i].name); 
    if(userpermissions[i]=== permissionrequired) 
     $scope.checkbit = 1; 
} 
return $scope.checkbit; 
}} 

$scope.userpermissions - это массив назначенных разрешений для текущего пользователя.ng-show hide на основе возвращаемого значения функцией

Forexample:

[ "Создать", "Показать", "Обновление", "Удалить"]

или

[ "Создать", "Показать", "Update"]

или

[ "Update", "Показать"]

Таким образом, в случае, если мой текущий пользователь имел только [ "Up date "," Show "]. Он не должен показывать те, что показаны ShowHide ('Create'), но это происходит, если у меня есть ShowHide ('Show') в любом из элементов li и отлично работает, если элементы li, которые вызвали ShowHide, «Создать» в качестве необходимого разрешения. В этом случае он будет скрывать элементы, требующие разрешения «Создать». Но он терпит неудачу, если я добавлю Show в качестве необходимого разрешения в любой из остальных элементов li.

Я называю это так:

<ul class="nav navbar-nav"> 
    <li><a href="#" ng-click="navMode = 'createUser'" ng-show="showHide('Create')" ><strong>Create User</strong></a></li> 
    <li><a href="#" ng-click="navMode = 'getUser'" ><strong>Get Users</strong></a></li> 
    <li><a href="#" ng-click="navMode = 'createRole'" ng-show="showHide('Create')" ><strong>Create Role</strong></a></li> 
    <li><a href="#" ng-click="navMode = 'getRole'"><strong>Get Roles</strong></a></li> 
    <li><a href="#" ng-click="navMode = 'createPermission'" ng-show="showHide('Create')" ><strong>Create Permission</strong></a></li> 
    <li><a href="#" ng-click="navMode = 'getPermission'"><strong>Get Permissions</strong></a></li> 

</ul> 

Он отлично работает, когда я использую только 'Создать' элементы Li or'Show'in. Но все они появляются, если я использую ShowHide('Show') в любом из оставшихся элементов li.

Что кажется неправильным и как я могу это исправить?

+0

Показать 'userpermissions' (или '$ scope.userpermissions'?) ... Подробнее,' $ scope.checkbit' должен лучше быть локальной переменной области ('var checkbit'), в противном случае это значение будет сохраняться amon g, и, если вы не установите его на '0' при запуске, это будет проблемой ... – MarcoS

ответ

1

изменить функцию к следующему

$scope.showHide = function(permissionrequired){ 
var checkbit = 0; 
for(var i=0; i< userpermissions.length; i++){ 
    console.log(userpermissions[i].name); 

    if(userpermissions[i]=== permissionrequired) 
     checkbit = 1; 
} 
return checkbit; 
}} 
+0

Спасибо. Мой плохой. это было связано только с тем, что я не установил контрольную сумму обратно в неопределенный при следующем вызове функции. Спасибо :) –

+1

Вам не нужно создавать контрольную переменную переменной $ scope. Рекомендуется иметь локальную переменную, что сделает вашу функцию более чистой и многоразовой. – dhavalcengg

+0

Большое вам спасибо за подсказку :) Я справлю его на это –

0

Первое, что вы, вероятно, следует изменить это, чтобы добавить .name к вашему, если заявление:

if(userpermissions[i].name=== permissionrequired) 

Plz Måken в http://jsfiddle.net/

Смежные вопросы