В angular, как я могу использовать ng-if для содержащего тега только без разметки трейлинга

Допустим, у меня есть два HTML-элемента с одним тегом, но каждый с разным набором свойств. Как я могу условно выбирать между ними?

У меня есть следующие два тега:

<a ui-sref="root.one(::{param: value})">
<a target="_blank" href="{{::model}}">

Мне нужно условно выбрать одну из них, и добавить другую разметку до закрытия тега.
Может ли что-то подобное работать?

<a ng-if="::condition" ui-sref="root.one(::{param: value})">
<a ng-else target="_blank" href="{{::model}}">
  <div>
    more nodes
  </div>
</a>

1 ответ

  1. В конце я решил, что это невозможно, поэтому я прибегнул к слиянию тегов A, как это:

    <a ng-attr-target="{{::!condition? '_blank' : undefined}}" href="{{::model}}" ng-attr-ui-sref="{{::(condition? 'root.one(::{param: value})' : '.')}}">
    

    Замечания:

    1. Когда условие выполнено, выражение ng-attr-target установлено в undefined, так что целевой атрибут не будет вставлен вообще. По-видимому, если вы установите его на _self, это испортит угловую маршрутизацию
    2. Когда условие не выполняется, выражение ng-attr-ui-sref устанавливается в некоторый случайный незаявленный маршрут ui — sref -‘.’. Обычно вы просто устанавливаете его в undefined, если вы не хотите, чтобы атрибут вставлялся, но есть какая-то ошибка в ui-sref или в angular, что приводит к некоторым ошибкам в консоли, поэтому мне пришлось прибегнуть к этому методу.