AngularJS md-select将两个选择值绑定在一起

时间:2019-03-21 17:47:15

标签: javascript html angularjs

我正在尝试创建一个角度多重选择,其中从中选择数组中的一个元素是数组中另一个元素的克隆。此克隆元素的某些字段已更改。

<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 :(得分:0)

_.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生成新的内部变量。