如何格式化AngularJS数据模型?

时间:2015-02-26 15:07:52

标签: json angularjs model-view-controller

嗨,我刚开始有角度,我正在努力寻找答案,我确定这是一件非常简单的事情。

我目前正在获取某些输入框的值并将其推入我的范围。这是创建一个长阵列'例如:

['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());
        });

}

任何帮助或指示都会非常感激,因为我只是绕着角度方向前进

1 个答案:

答案 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