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);