Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.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重复-按$index删除_Javascript_Angularjs_Angularjs Directive_Angularjs Scope_Angularjs Ng Repeat - Fatal编程技术网

Javascript Angularjs ng重复-按$index删除

Javascript Angularjs ng重复-按$index删除,javascript,angularjs,angularjs-directive,angularjs-scope,angularjs-ng-repeat,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,Angularjs Ng Repeat,我有以下两条指示。一个是查询生成器,另一个是查询行。querybuilder指令使用ng repeat列出数组中的查询行。添加按钮可以工作,但是我想包括一个删除按钮。但是,问题是我似乎无法获取$index,因此我可以将其作为参数传递给delete函数(即delete($index)) 下面是JS代码 .directive('queryBuilder', function() { return { restrict: 'E', scope: {},

我有以下两条指示。一个是查询生成器,另一个是查询行。querybuilder指令使用ng repeat列出数组中的查询行。添加按钮可以工作,但是我想包括一个删除按钮。但是,问题是我似乎无法获取$index,因此我可以将其作为参数传递给delete函数(即delete($index))

下面是JS代码

  .directive('queryBuilder', function() {
    return {
      restrict: 'E',
      scope: {},
      controller: function($scope) {
        $scope.rows = [{}]

        //add method not used - delete in future
        $scope.add = function() {
          $scope.rows.push({})
        }

        $scope.$on('addRowRqst', function(evt) {
          // evt.stopPropagation()
          console.log('add rqst received')
          $scope.rows.push({})
        });
        $scope.$on('deleteRowRqst', function(evt) {
          // evt.stopPropagation()
          console.log('delete rqst received')
          $scope.rows.push({})
        });        
      },
      templateUrl: 'queryBuilderTemplate.html',
    }
  }).directive('queryRow', function() {
    return {
      scope: {},
      restrict: 'EA',
      templateUrl: 'queryRowTemplate.html',
      controller: function($scope) {
        $scope.addRqst = function() {
          console.log('addRowRqst click')
          $scope.$emit('addRowRqst')
        };
        $scope.deleteRqst = function(index) {
          console.log('deleteRowRqst click')
          $scope.$emit('deleteRowRqst')
        };
      },
      link: function(scope, elem, attrs) {

      }
    }
下面是查询生成器模板的HTML代码

<form role="form">
  <query-row ng-repeat="row in rows track by $index"></query-row> 
  <button type="submit" class="btn btn-primary">Submit</button>
</form>

提交
这是删除按钮(查询行模板的一部分)。当我尝试将$index作为参数传递时,这里的$index是“未定义的”

<button class="btn btn-default" ng-click="deleteRqst($index)" type="submit">Delete Row</button>
删除行
这是普朗克


我的目标是:使用Delete按钮删除所选行,这是因为$index位于父作用域上,但您在查询行指令中使用的是隔离作用域

请尝试以下操作:

<button class="btn btn-default" ng-click="deleteRqst($parent.$index)" type="submit">Delete Row</button>
删除行

或者,删除隔离作用域。

我不确定为什么这不起作用,但您不需要按$index包含曲目。ng repeat自动创建$index,该索引在repeat内部可用,但是有更好的方法吗?我的印象是,如果在层次结构中添加更多的父指令,可能会导致复杂的情况,因此应该避免使用$parent?还是我错了?在查询行指令(
scope:{}
)中是否需要隔离作用域?尝试删除它,同时删除
$parent.
。您可以将其更改为
范围:false
,或
范围:true
。请参阅下的
范围
部分