Angular: Как отключить тег привязки из массива (ng-repeat) тегов привязки

У меня есть ng-повтор тегов привязки, который отображает список активируемых членов группы:

<a href="#/contact/{{ ::member.fullProfile.xpid }}" ng-click="storeRecentContact(member.fullProfile.xpid)" class=" GroupRow ListRow ListRow-Contact vmsection ng-class:{'last': $last}" ng-class-odd="'ListRowOdd'" ng-class="{'ListRowLast':$last}" data-ng-repeat="member in group.members | filter: searchFilter() | orderBy: [selectedSort.type, 'fullProfile.displayName'] track by member.xpid" droppable="Call" ng-disabled="member.contactId == myself.contactId">

Как вы можете видеть в конце тега привязки, я пытаюсь отключить 1 из элементов ng-repeat, точнее, тег привязки себя / себя.

myself.contactId

а также

member.contactId

будет таким же на теге привязки, представляющем моего пользователя. Тем не менее, это все еще не отключает мою способность нажимать на свой собственный тег привязки члена группы. Я правильно использую ng-disabled? Или, альтернативно, есть ли другой способ сделать это?

2 ответа

Решение

Вы не могли отключить <a> якорный тег, вы должны попробовать более простой способ сделать это, обрабатывая логику самого html, используя && проверить как первая проверка member.contactId != myself.contactId и если это правда, то только огонь storeRecentContact(member.fullProfile.xpid) метод.

здесь ng-click должен выглядеть ng-click="member.contactId != myself.contactId && storeRecentContact(member.fullProfile.xpid)" теперь вы можете удалить ng-disabled директива, которая не имеет смысла.

наценка

<a href="#/contact/{{ ::member.fullProfile.xpid }}" 
ng-click="member.contactId != myself.contactId && storeRecentContact(member.fullProfile.xpid)" 
...other attributes..
.....
></a>

Небольшой Демо-Планер

Обновить

Чтобы перестать перенаправлять вашу ссылку на другую страницу, вы можете использовать ng-attr директива, которая установит href значение тега (куда вы хотите перенаправить SPA) по оценке {{}} выражение. Если вы хотите перенаправить на #/contact/1 тогда ваш href было бы href="#/contact/{{ ::member.fullProfile.xpid }}" в противном случае это было бы просто href="" как пустой Предположим, что вы используете условие, которое member.contactId не должно быть равным member.contactId лайк member.contactId != myself.contactId тогда вы не хотите, чтобы пользователь перенаправлял ваш SPA на страницу контактных данных. Эта вещь будет обрабатываться {{member.contactId != myself.contactId' ? #/contact/'+ member.fullProfile.xpid: '' }} из ng-attr-href это изменится href значение атрибута на основе {{}} выражение

<a ng-attr-href="{{member.contactId != myself.contactId' ? #/contact/'+ member.fullProfile.xpid: '' }}" 
   ng-click="member.contactId != myself.contactId &&  storeRecentContact(member.fullProfile.xpid)" 
   ...other attributes..
   .....
></a>

ng-disabled создает атрибут disabled, который используется только для входных данных.

Якорный тег не является входом, поэтому не может быть отключен. То, что вы хотите сделать, это изменить способ решения этой проблемы. Вы можете скрыть это (a элемент), вы можете захотеть удалить директиву href или замените его на "#" или что-то в зависимости от вашего состояния.

Вы также можете сделать:

ng-href="{{getRef(member, mySelf)}}" и рассчитать это из вашего контроллера. Если ваше условие ложно и это должно отображаться нормально, просто верните обычную ссылку. В противном случае вы можете вернуть #:

$scope.getRef = function(member, myself) {
    if (member.contactId == myself.contactId) { 
        return "#";
    }
    else {
        return "#/contact/" + member.fullProfile.xpid;
    }
}
Другие вопросы по тегам