2015-06-23 29 views
1

我有一个HTML模板是这样的:AngularJS - 找到所有ngModel在当前范围内

<div ng-controller="MyCtrl"> 
    <input ng-model="model.name" /> {{model.addr}} 
    <button ng-click="detect()">detect</button> 
</div> 

这是控制器:

function MyCtrl($scope) { 
    $scope.detect = function() { 
     var fields = []; //['model.name', 'model.addr'] 
     //call server with selected fields 
    } 
} 

模板可以由用户定制,动态生成,而不是静态模板。我想优化从服务器返回的数据模型,只返回模板中所需字段的值。这个想法是我想从模板中获取所有的ng-model字段并将它们传递给服务器。返回的数据将只包含值这些字段,而不是整个数据模型,例如:

{ 
    name: 'Superhero', 
    addr: 'Mars' 
} 

如果我改变这样的模板(删除model.addr):

<div ng-controller="MyCtrl"> 
    <input ng-model="model.name" /> 
    <button ng-click="detect()">detect</button> 
</div> 

字段阵列应该['model.name']并从服务器返回的数据应该是:

{ 
    name: 'Superhero' 
} 

有什么方法可以让范围内的所有NG-示范田? 谢谢!

+0

在角度模型和数据应该映射或让说应该连接。你不能通过标签来选择元素,比如在jQuery中。即使你用jQuery来做这件事,它也会是不正确的角度,并会导致其他困难,比如模型不会在以后更新。你在建造一个表单生成器吗? – astroanu

+0

@astro是的,我正在建造一个表单构建器。 – Arnol

+0

好的,那么你需要做的是把你的每一个表单当作一个指令,并将你从服务器获得的表单构建器的输入对象解析为指令,并相应地更新你提交的模式。看看这个项目他是如何做到的https://github.com/Textalk/angular-schema-form和https://github.com/danhunsaker/angular-dynamic-forms有点难以解释堆栈溢出 – astroanu

回答

1

无论你使用ng-modal,你都可以做1件事情,采用对象模式并使用点(。)分配值。

假设

<div ng-controller="MyCtrl"> 
<input ng-model="model.name1" /> 
<input ng-model="model.name2" /> 
<input ng-model="model.name3" /> 
<button ng-click="detect()">detect</button> 

所以,你可以在范围上获得模型,因此范围的所有属性。