很抱歉再次提出此问题,但未找到任何答案或解决方法。
这是对此问题的跟进:Stackoverflow
我有一个描述问题的plunker(基本上将树结构放在下拉列表中):
如图所示,第一个选择不选择值并返回空行 - 这也是一个谜。
我无法找到任何类似的病例而我已经接近放弃,所以这是最后的机会。
关键代码区域是过滤器和initTreeSelect函数:
$scope.initTreeSelect = function(tree){
$scope.filteredFields = $filter('flattenTree')(tree);
return $scope.filteredFields[0];
};
angular.module('myApp.filters', []).filter('flattenTree', function (OrgSvc) {
return function (array) {
var arrayToReturn = [];
arrayToReturn = OrgSvc.flattenTree(array);
return arrayToReturn;
};})
非常感谢您的帮助! 感谢
答案 0 :(得分:3)
Dayan Moreno Leon在回答中所写的内容实际上是正确的。问题实际上是角度不断跟踪模型数据(因为默认情况下,对象/数组是通过引用标识的)。
这被挫败了,因为你的flattenTree
不断返回新创建的对象:
flatTree.push({id:tree[i].id, display:tree[i].display, parentId:tree[i].parentId});
对于您的具体问题,我认为使用track by
会有所帮助,例如:
<select
class='form-control'
ng-model="treeValue1"
ng-init="treeValue1 = initTreeSelect(fields)"
ng-options="element as element.display for element in fields | flattenTree track by element.id"
></select>