Javascript 使用ng repeat重新加载时未设置选定项目的内容

Javascript 使用ng repeat重新加载时未设置选定项目的内容,javascript,html,angularjs,angularjs-ng-repeat,Javascript,Html,Angularjs,Angularjs Ng Repeat,我有一个代码,它能够在按下按钮时创建一对具有ng repeat的选择和输入元素。这些元素在单独的指令中定义: <select ng-model="rule.parameter" ng-options="sel1.name for sel1 in selects1" ng-change="change(rule.parameter)"></select> js代码如下所示: $scope.save = function(filter) { $scope.mydat

我有一个代码,它能够在按下按钮时创建一对具有
ng repeat
的选择和输入元素。这些元素在单独的指令中定义:

<select ng-model="rule.parameter" ng-options="sel1.name for sel1 in selects1" ng-change="change(rule.parameter)"></select>
js代码如下所示:

$scope.save = function(filter) {
    $scope.mydata = JSON.stringify(filter, null, 2);    
};
现在假设我们已经将
$scope.mydata
中的数据保存在一个文件中(请参阅中的mydata.txt)。当用户按下另一个按钮取回数据时,应再次生成并显示元素:

<button ng-click="getData()">Get data</button>
我的问题是,单击该按钮时,选择框中的元素没有设置。输入字段的内容已设置,但两个选择框的内容未设置

有人能帮我吗

这把小提琴是完整的。只需单击获取数据按钮(mydata.txt中已经有一些内容)


先走一步

默认情况下,ngModel通过引用而不是值监视模型

mydata.txt
加载数据时,第一次选择的模型(
rule.parameter
)将为:

{"name":"Item1","relation":"default"}
选项数组将包含一个看起来相同的项,但它仍然是另一个对象

例如,这将记录
false

var object1 = {"name":"Item1","relation":"default"};
var object2 = {"name":"Item1","relation":"default"};

console.log(object1 === object2);
一种解决方案是使用
track by
,而不是通过属性值来识别对象。请注意,您选择的属性值必须是唯一的

例如:

<select ng-model="rule.parameter" 
        ng-options="sel1.name for sel1 in selects1 track by sel1.name" 
        ng-change="change(rule.parameter)"></select>

演示:

另一个问题@tasseKATT:当我有这样的嵌套重复元素时,我必须做什么:。单击“获取数据”按钮(单击按钮两次以加载数据)时,嵌套组的关系未设置。我必须提供一个$index或什么的吗?这是Expected吗?我只有几分钟的时间看一看。如果不是,我今晚有更多的时间,我会再看一看。嗨,不,不幸的是不是。未设置缩进的四个ng repeat元素的每秒选择框中的数据。当我输出
{{filteredselect2}}
的内容时,缩进/嵌套的选择框的相应数组为空。我不知道为什么:(问题是dynamicSelect对中的
$scope.change
函数将在dynamicSelect的$http调用完成之前运行,这意味着
scope.selects2
将为空。解决此问题的一个方法是防止指令在数据可用之前编译
我想我将使用
$wa的版本。)tch
。非常感谢您的时间-您为我节省了几个小时!:)
var object1 = {"name":"Item1","relation":"default"};
var object2 = {"name":"Item1","relation":"default"};

console.log(object1 === object2);
<select ng-model="rule.parameter" 
        ng-options="sel1.name for sel1 in selects1 track by sel1.name" 
        ng-change="change(rule.parameter)"></select>
if (scope.rule.parameter) scope.change(scope.rule.parameter);