AngularJs在选择框中添加选项

AngularJs在选择框中添加选项

问题描述:

我是AngularJs的新手。我在添加选项以选择由JavaScript创建的框时遇到问题。以下是我的代码。AngularJs在选择框中添加选项

var inputElements = $('<div><label style="float:left;">' + i + '</label><select ng-model="object" class="form-control sel" style="width:300px; float:right; margin-right:75px;"> <option>select</option></select></div></br></br>'); 
var temp = $compile(inputElements)($scope); 
$('#projOrder').append(temp); 
$scope.object = object; 
//for(var opt=0; opt<selOptLabels.length; opt++) { 
$('.sel').append('<option ng-repeat="obj in object" value="'+ 
{{obj.value}}+'">'+{{obj.value}}+'</option>'); 

我收到此错误: - 语法错误:无效的属性ID

嗨,我张贴的JSON例子。在我的例子中,这只是json的一小部分。

"ProjectOrder": { 
"Connect direct required": { 
    "value": "N", 
    "id": "STR_15523_62" 
}, 
"Cores": { 
    "value": ".5", 
    "id": "NUM_15523_50" 
}, 
"Permanent data in GB": { 
    "value": "100", 
    "id": "NUM_15523_56" 
}, 
"Description": { 
    "value": "AZBNL azbngb", 
    "id": "STR_15523_2" 
}, 
"Order Id": { 
    "value": "15523", 
    "id": "INT_15523_96" 
}, 
"Project cost center": { 
    "value": "N", 
    "id": "STR_15523_66" 
}, 
"Project debitor": { 
    "value": "N", 
    "id": "STR_15523_64" 
}, 
"Project OE": { 
    "value": "N", 
    "id": "STR_15523_57" 
}, 
"Project SITE": { 
    "value": "N", 
    "id": "STR_15523_59" 
}, 
"Project Status": { 
    "value": "RFC", 
    "id": "STR_15523_54", 
    "dropdown": [ 
    { 
     "value": "IW", 
     "label": "In Work" 
    }, 
    { 
     "value": "RFC", 
     "label": "Ready for Creation" 
    }, 
    { 
     "value": "CR", 
     "label": "Created" 
    }, 
    { 
     "value": "FC", 
     "label": "Failed" 
    } 
    ] 
}, 
"Project Type (paas, miner)": { 
    "value": "paas", 
    "id": "STR_15523_37", 
    "dropdown": [ 
    { 
     "value": "paas", 
     "label": "PaaS Project" 
    }, 
    { 
     "value": "miner", 
     "label": "Miner Project" 
    } 
    ] 
}, 
"WORK data in GB": { 
    "value": "100", 
    "id": "NUM_15523_55" 
} 

}

现在我要创建输入字段和下拉菜单(如果有一个下拉菜单)使用JSON数据

+0

我没有看到对'property id'的任何引用。你确定这段代码有问题吗? – Leguest

+0

是的,我确定问题是在追加选项行。 –

+0

在资源管理器中,错误期望为字符串或数字 –

你真的不应该用手构建HTML这样的。如果您使用模板并让模板引擎处理繁重的工作,那么最好。

我还注意到,您使用object作为ng-model。相反,你应该有一个单独的变量,它将保存选定的值。

这里是这样做的更好的方式 - 在一个.html文件:

<div ng-repeat="object in listOfObjects" 
    <label style="float: left">{{ $index }}</label> 
    <select ng-model="selectedValues[$index]" class="form-control sel" 
     style="width:300px; float:right; margin-right:75px;" 
     ng-options="obj.value for obj in object"></select> 
</div> 

然后在任何控制器已在JavaScript中设置:

// this will be the list of selected values 
$scope.selectedValues = new Array(list.length); 
// this would be the array that each `object` is part of 
$scope.listOfObjects = list; 

这还不是最优雅的解决方案,但基本上我所做的是构建一个与对象列表长度相同的数组。当您在ng-repeat中时,角模板有一个特殊变量$index,它跟踪您正在循环的数组的当前索引。

因此,当用户更改第三个选择框(索引2)的选定值时,$scope.selectedValues[2]将设置为选定的选项。

编辑:关于转变JSON到数组:

var list = Object.keys(json).map(function(jsonKey) { 
    return { 
     name: jsonKey, 
     label: json[jsonKey].label, 
     value: json[jsonKey].value 
    }; 
});` 
+0

嗨,这是不可能的在我的情况下使用模板。因为我必须在json数据的基础上创建下拉框。如果只有下拉对象,则会创建下拉菜单。 –

+0

你有更完整的例子吗?你应该能够使用JSON数据来支持这一点 - 我一直这样做。 – gonzofish

+0

嗨,我已经上传了json数据。请看看@ gonzofish –

所以..有许多的原因,这是行不通的。因为您要附加到HTML字符串模板支架所提供的代码甚至不工作...

$('.sel').append('<option ng-repeat="obj in object" value="' +{{obj.value}}+'">'+{{obj.value}}+'</option>'); 

是否有您正在尝试建立自己的标记在js的理由吗?

它也建议不要在角度控制器内使用jQuery。如果你有jQuery加载的jQuery对象可通过angular.element,否则角使用jQuery的光。

而不是列举的其他问题在这里,我放在一起的是如何在角

https://codepen.io/parallaxisjones/pen/BRKebV

一个选择的作品此外,你应该张贴问题到堆栈溢出前咨询角文档这个基本的例子。这些文档提供了一个非常清晰的例子,说明如何在select中使用ng-repeat。https://docs.angularjs.org/api/ng/directive/select

EDIT:我更新了与HTTP GET请求获取JSON数据的一例codepen

EDIT:更新codepen与提供的数据例如,遍历对象,具有(键,值)的在ng-repeat中使用json语法

+0

是的,我必须在json数据的基础上创建输入字段。 –

+0

如果是这种情况,您应该获取控制器中的数据,并在成功时将其设置在$ scope变量上。通过这种方式,您可以在HTML标记中访问它。结帐我的codepen – parallaxis

+0

@MuhammadUmar现在检查笔,我认为这可能会清除一些东西给你 – parallaxis