Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS:在ng repeat中使用ng模型的自定义指令_Javascript_Angularjs_Angularjs Directive_Angularjs Scope_Angularjs Ng Repeat - Fatal编程技术网

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;
});