我正在尝试创建一个角度多重选择,其中从中选择数组中的一个元素是数组中另一个元素的克隆。此克隆元素的某些字段已更改。
<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;
}
但是,这似乎很棘手。我想知道是否有更好的方法可以做到这一点?
答案 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
生成新的内部变量。