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;
}
}