AngularJS md-select Связывает два выбранных значения вместе - PullRequest
0 голосов
/ 21 марта 2019

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

<md-select ng-model="$ctrl.modbusMeterDataParameters.points"
           md-on-close="$ctrl.unitSelect()" multiple no-dirty>
  <md-option ng-repeat="point in $ctrl.getPoints()" ng-value="point">
    {{point.name}}
  </md-option>
</md-select>

Изначально я получал ошибку $$hashkey, но я исправил ее, добавив track by к моему тегу md-option:

<md-option ng-repeat="point in $ctrl.getPoints() track by point.name"
           ng-value="point">
    {{point.name}}
</md-option>

Но в точках, называемых $$mdselectid, все еще имеется угловое поле, которое одинаково для исходного элемента и клонированного элемента. Я создаю клонированный элемент следующим образом:

this.filteredPoints = this.filterAndSortPoints(this.points);
const threePhaseDataPoint = _.cloneDeep(this.filteredPoints[0]);
threePhaseDataPoint.name = this.fullMeterDataLabel;
this.filteredPoints.push(threePhaseDataPoint);

В настоящее время я решаю проблему, выполняя это:

if (threePhaseDataPoint.$$mdSelectId) {
    threePhaseDataPoint.$$mdSelectId = this.filteredPoints.length * 2;
}

Но это выглядит очень глупо. Мне интересно, есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 22 марта 2019

Заменить _.cloneDeep на angular.copy :

this.filteredPoints = this.filterAndSortPoints(this.points);
̶c̶o̶n̶s̶t̶ ̶t̶h̶r̶e̶e̶P̶h̶a̶s̶e̶D̶a̶t̶a̶P̶o̶i̶n̶t̶ ̶=̶ ̶_̶.̶c̶l̶o̶n̶e̶D̶e̶e̶p̶(̶t̶h̶i̶s̶.̶f̶i̶l̶t̶e̶r̶e̶d̶P̶o̶i̶n̶t̶s̶[̶0̶]̶)̶;̶
const threePhaseDataPoint = angular.copy(this.filteredPoints[0]);
threePhaseDataPoint.name = this.fullMeterDataLabel;
this.filteredPoints.push(threePhaseDataPoint);

Функция angular.copy клонирует объекты и пропускает свойства, начинающиеся со знака доллара ($). Это заставит md-select генерировать новые внутренние переменные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...