Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 向表中添加行会导致下拉函数重复_Angularjs - Fatal编程技术网

Angularjs 向表中添加行会导致下拉函数重复

Angularjs 向表中添加行会导致下拉函数重复,angularjs,Angularjs,我创建了一个表,其中一行有三个下拉列表 药物-剂量-周期 我还创建了一个按钮Add Drug,它将添加另一行相同的下拉列表 我从数据库中获取数据,并将其填充到下拉列表中 异常: 剂量下降取决于药物的种类。因此,我创建了一个观察者来检查药物的值何时发生变化,然后创建了一个名为$scope.array的剂量数据数组,并将其填充到$scope.selectedDose中,这是剂量下拉列表中的值。因此,第一个药物剂量数据与第二个药物剂量数据不同请从JSFIDLE的下拉列表中选择第二种药物和第五种药物,并

我创建了一个表,其中一行有三个下拉列表

药物-剂量-周期

我还创建了一个按钮Add Drug,它将添加另一行相同的下拉列表

我从数据库中获取数据,并将其填充到下拉列表中

异常

剂量下降取决于药物的种类。因此,我创建了一个观察者来检查药物的
值何时发生变化,然后创建了一个名为
$scope.array
的剂量数据数组,并将其填充到
$scope.selectedDose
中,这是剂量下拉列表中的值。因此,第一个药物剂量数据与第二个药物剂量数据不同请从JSFIDLE的下拉列表中选择第二种药物和第五种药物,并查看剂量值的变化情况

$scope.$watch("value",  function() {
  $scope.array = $scope.value.dose_array.split(',');
  $scope.selectedDose = $scope.array[0];
});
问题

如果您使用我共享的JSFIDLE链接,您会发现当使用按钮添加药物并从第一个药物中选择另一个药物时,第一行的剂量数据也会发生变化。原因是,
$scope.selectedDose
随任何行中的任何药物数据而变化

我想到的解决方案是创建一个数组中的一个数组

$scope.selectedDose[rowIndex] = $scope.array[0];
添加每一行后,剂量下拉列表将有自己的
selectedDose
数据。然而,这是复杂的,无法完成

这个问题有什么解决办法吗?我已经添加了JSFIDLE并尽可能多地组织了我的代码。这应该能很好地说明我的问题

JSFIDDLE


我不会为添加
doserray
而添加手表。您可以将其添加到
ng click
事件中,并将其作为
doserray
添加到当前
行中

还要改进变量和函数名,因为没有人知道函数
func
的功能。好的名字会帮助你理解你的代码

请看一下下面的演示或本演示

app=angular.module('app',[]);
app.controller('myCtrl',['$scope','$http',函数($scope,$http){
$scope.rows=[];
var rowTmpl={
"药物":"药物",,
“剂量”:“剂量”,
“期间”:“期间”,
};
//初始化第一行
$scope.rows.push(angular.copy(rowTmpl));
//时期
$scope.period={
当前期间:“1天”
};
$scope.periods=[
“一天”,
“2天”,
“3天”,
“4天”];
$http.get('http://medicaladvisto.com/getDrugs)。成功(函数(数据){
$scope.ourDatas=数据;
//控制台日志(数据);
});
$scope.setDose=功能(行,药物){
//console.log('selected',drug);
var指数=$scope.ourDatas.indexOf(药物);
如果(索引==-1)返回;
var doserray=$scope.ourDatas[index].dose_array.split(',');
row.doseOptions=doserray;
};
//添加行
$scope.addRow=函数(){
var newRow=angular.copy(rowTmpl);
newRow.selectedPeriod=null;
newRow.singleSelect=null;
$scope.rows.push(newRow);
};
$scope.removeow=函数(行索引){
if(confirm('您确定要删除此项吗?')$scope.rows.splice(rowIndex,1);
}
}]);

{{ourDatas.doseOptions}
{{row.drug}}
{{row.dose}}
{{row.period}

类型错误:无法在
$scope.array=$scope.value.dose\u array.split(',')处读取null属性“dose\u array”这只是第一个错误,因为没有为第一个下拉列表选择值@MikkoViitalaI认为问题在于,您的
addRow
函数不是复制惰性对象,而是复制数组的第一个元素(
$scope.rows[0]
)。尝试创建一个可以从数组外部克隆的对象,这样当您将第一行设置为值时,它就不会层叠。您可以通过编写一个答案来详细说明吗?已创建了多个对象行。如果我将($scope.rows[0])替换为($scope.rows),它仍然会复制剂量数组@claies,这比您做得好,先生。我想知道为什么增加手表功能不是个好主意?不客气。我认为,如果你真的需要手表,添加手表是可以的,但如果你有很多手表,它们会减慢你的应用程序,因为它们经常被人检查。因此,最好在用户交互方面做些事情(
ng单击
/
ng更改
..),并尽量避免
$watch
)。避免使用手表也有一个好处。