2015-04-01 5 views
0

Предположим, у меня есть директива, которая проверяет разрешение. Так что я coud сделать это:Директива разрешения в AngularJS

<a permissions="something.delete">Delete</a> 

Если «something.delete» в списке разрешенных разрешений, то ничего не отображается.

Имея этот код:

link: function (scope, element, attrs) { 
    var permissionsPromise = PermissionService.checkForPermissions(attrs.permissions); 

    permissionsPromise.then(function(result) { 
    if (result=== false) { 
     element.remove(); 
    } 
    }) 
} 

а потому, что PermissionService.checkForPermissions() возвращается обещают, так что это может занять некоторое время, чтобы выяснить права доступа, тем временем функция ссылка будет оказывать на-элемент не зная результат разрешения-проверки ,

Что было бы правильным решением для решения этой проблемы?

+1

Восстановите свою логику и спрячьте элемент по умолчанию, а затем покажите его на основе значения обещания. – mccainz

+0

Я подумал, что это уместно. Но если я хочу, чтобы он не скрывался, но не существовал вообще. – ses

+0

Задайте себе, какова ваша настоящая цель, поскольку вы на самом деле не выполняете проверку прав на стороне клиента (или вам не должно быть). Это должно быть больше, чтобы предоставить пользователю правильный опыт пользовательского интерфейса. Если вы хотите полностью удалить его, просто сохраните ссылку на родительский элемент, удалите элемент, и когда ваше обещание вернет его обратно родительскому языку .. или нет. – mccainz

ответ

2

Восстановите свою логику и спрячьте элемент по умолчанию, а затем покажите его на основе значения обещания.

что-то вдоль линий элем [0] .style.display = 'никто' -> элем [0] .style.display = 'блок'

Спросите себя, что ваша реальная цель, как вы Арен Фактически выполняется проверка разрешений на стороне клиента (или вы не должны быть). Это должно быть больше, чтобы предоставить пользователю правильный опыт пользовательского интерфейса. Если вы хотите полностью удалить его, просто сохраните ссылку на родительский элемент, удалите элемент, и когда ваше обещание вернет его обратно родительскому языку .. или нет.

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