Есть ли способ заказать опцию md, чтобы сначала показать выбранные? [вроде исправлено, но не совсем] - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть список параметров, и у каждого параметра может быть выбрано несколько тегов из общего массива тегов. В приведенном ниже примере это упорядочивает теги каждой строки Option по одному списку «выбранных тегов», в этом случае теги выбираются в первой строке. Мне нужно изменить его так, чтобы список тегов каждой строки параметров был упорядочен по выбранным тегам.

Кажется, что это довольно просто сделать, просто нужно использовать текущие "опции [?]. Выбранные" в функции упорядочения, но я не могу найти способ сделать эту простую задачу ...

    searchTags = "";
    options = [
      { "Name": "optA", "Selected": [3]},
      { "Name": "optB", "Selected": [2]},
      { "Name": "optC", "Selected": [1,3] }
    ];
    mytags = [
      { "Id": 1, "Name": "tag-a1"},
      { "Id": 2, "Name": "tag-b2"},
      { "Id": 3, "Name": "tag-c3" }
    ];

    tagFieldOrder = function (tag) {
      var tagList = $scope.options[0].Selected
      if (tagList && tagList.includes(tag.Id))
        return 'a' + tag.Name + '';
      else
        return 'z' + tag.Name + '';
    };
    <md-list-item ng-repeat="opt in options">
      <div style="margin-right:20px;">
        {{opt.Name}}
      </div>
      <div style="margin-right:20px;">
        <md-select ng-model="opt.Selected" multiple class="inline-flex md-select-down" >
          <md-select-header class="search-header">
            <input type="search"
              ng-model="searchTags"
              placeholder="Filter Tags"
              class="md-text" />
          </md-select-header>
          <md-option  ng-repeat="tag in mytags | orderBy:tagFieldOrder | filter:searchTags" value="{{tag.Id}}">
            {{tag.Name}}
          </md-option>
        </md-select>
      </div>
    </md-list-item>

https://plnkr.co/edit/HYtRCaNBZb5KTpPNIfZ6?p=preview

Я думал об использовании $ index, но не смог заставить его работать, либо я мог получить текущий объект "tag" ИЛИ $ index, связанный с итератором параметров, а не оба. $ parent. $ index возвращает всегда так же, как $ index.

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

Ожидаемым результатом будет то, что во втором ряду «tag-b2» должен появиться сверху.


    <md-option ng-repeat="tag in mytags | orderBy:tagFieldOrder(tag, opt.Selected)>
    $scope.tagFieldOrder = function (tag, tagList) { ... }

«тег» в этом случае не определен

    <md-option ng-repeat="tag in mytags | orderBy:tagFieldOrder($index, $parent.$index)">
    $scope.tagFieldOrder2 = function (index1, index2) { ... }

Невозможно получить текущий индекс, только родительский.


Я думал о двух <md-option ...>, с фильтрами для выбранных и другим для невыбранных. Но проблема в том, что я не знаю, какой тег или какую опцию я фильтрую ...


Единственный способ найти список тегов, упорядоченный по выбранным тегам, - использовать ng-if="isSelected(tag, opt.Selected)" вместо любого реального порядка. Но это некрасиво и имеет некоторые проблемы ... Обновлен Plunker, чтобы показать, что это «решение» вроде работает.

Но я думаю, что никто не мог добиться большего успеха, поскольку никто здесь не предлагал никакой помощи вообще.

...