Javascript AngularJS:在ng repeat中使用ng模型的自定义指令
我试图创建一个列表组件,该组件绑定到定义列元数据和行值的列表。例如:Javascript AngularJS:在ng repeat中使用ng模型的自定义指令,javascript,angularjs,angularjs-directive,angularjs-scope,angularjs-ng-repeat,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,Angularjs Ng Repeat,我试图创建一个列表组件,该组件绑定到定义列元数据和行值的列表。例如: var list = { cols: [ { name: "date", display: "Date", type: "date" }, { name: "revenue", display: "Revenue", type: "dollars" } ], data: [ { date: "1/2/34", revenue: 10 }, { date: "2/3/45", reve
var list = {
cols: [
{ name: "date", display: "Date", type: "date" },
{ name: "revenue", display: "Revenue", type: "dollars" }
],
data: [
{ date: "1/2/34", revenue: 10 },
{ date: "2/3/45", revenue: 20 },
....
]
}
这非常简单,使用ng repeat遍历行,然后使用另一个ng repeat遍历列,如下所示:
<tr ng-repeat="row in list.data">
<td ng-repeat="col in list.cols">
{{ row[col.name] }}
</td>
</tr>
<tr ng-repeat="row in list.data">
<td ng-repeat="col in list.cols">
<span ng-if="editing == $parent.$index" ng-switch on="col.type">
<input ng-switch-default ng-model="row[col.name]">
<span ng-switch-when="pselect" pselect="col.options" ng-model="row[col.name]"></span>
</span>
<span ng-if="editing != $parent.$index" ng-switch on="col.type" ng-click="editRow($parent.$parent.$index)">
<span ng-switch-when="dollars">{{row[col.name] | currency}}</span>
<span ng-switch-default>{{row[col.name]}}</span>
</span>
</td>
</tr>
但是使用这种方法,我在列表组件的ng repeat中遇到了一个问题。请注意,在pselect控件上,ng模型=行[col.name]。在尝试创建名为row[col.name]的局部作用域变量时,前面的方法失败,因为row未定义。如果我创建一个变量scope.row={},这个错误就可以避免,但这只是一个错误
以前有没有人遇到过类似的问题?我觉得我忽略了一个更明显的解决方案,但我似乎无法处理指令和作用域之间的交互。1。使用$parent的错误做法。为什么需要pselect拥有一个隔离作用域?pselect是一个可重用的组件,它不应该影响使用它的作用域。
scope.$watch("model", function() {
scope.$eval(attrs.ngModel + " = model");
});
scope.$watch(attrs.ngModel, function(val) {
scope.model = val;
});