嗨,我刚开始有角度,我正在努力寻找答案,我确定这是一件非常简单的事情。
我目前正在获取某些输入框的值并将其推入我的范围。这是创建一个长阵列'例如:
['data-1','data-2','data-3']
我想用以下方式格式化我的数据
$scope.data = [
{
'header1': 'data1-1',
'header1': 'data1-2',
'header1': 'data1-3'
},
{
'header1': 'data2-1',
'header1': 'data2-2',
'header1': 'data2-3'
}
]
这是我目前的功能。
$scope.createRow = function(){
angular.forEach(angular.element("input"), function(value, key){
$scope.td.push($(value).val());
});
}
任何帮助或指示都会非常感激,因为我只是绕着角度方向前进
答案 0 :(得分:0)
这样做并不难......但是在我给你一把枪射击自己之前,只是说我认为为什么你想要其他格式的结构是有益的提。你似乎有很多重复的数据,而且总是一个红旗。
现在对于代码,您只需要在将对象推送到数组之前创建对象,如:
$scope.createRow = function(){
angular.forEach(angular.element("input"), function(value, key){
var obj = {
"header1": val + "-1",
"header2": val + "-2"
};
$scope.td.push(obj);
});
}
修改强>
好的,所以你试图在表中添加新行。首先,你不应该做angular.forEach,而是HTML中的那些输入元素应该绑定到现有的范围对象,如:
// obviously use better names than Input1Value
// I am here just giving you example
$scope.bindData = {
Input1Value: null,
Input2Value: null
};
// in HTML you will do
// <input ng-model="bindData.Input1Value" />
// <input ng-model="bindData.Input2Value" />
现在你已经消除了那个令人讨厌的angular.forEach,你需要有一些事件处理程序,例如当用户点击你想要将这个对象添加到数据绑定表的数组时。只需确保在将其添加到数组时克隆$ scope.bindData对象。
$scope.createRow = function(){
var newRowData = $scope.cloneObject($scope.bindData);
$scope.td.push(newRowData);
}
// http://heyjavascript.com/4-creative-ways-to-clone-objects/
// https://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object
$scope.cloneObject = function(objToClone) {
var newObj = (JSON.parse(JSON.stringify(objToClone)));
}
要关闭此答案 - 请记住,如果您发现自己在使用AngularJS的Javascript中直接引用HTML DOM元素 - 您做错了。这是一个消除的讨厌习惯,特别是如果你来自jQuery背景(以及怎么样?),其中一切都是$("#OhHiThere_ElementWithThisId)
。
显然,StackOverflow上关于此主题的主要线程就是这个:
“Thinking in AngularJS” if I have a jQuery background?
但是我发现它太理论化了,所以Google可以找到更好的概述:
jQuery vs. AngularJS: A Comparison and Migration Walkthrough