ng-repeat中的指令范围问题

时间:2019-02-21 10:11:10

标签: angularjs angularjs-scope

即使经过一周的深入试用,我也无法解决以下问题。

1)容器HTML 在E指令内部使用ng-repeat获得一个Html容器,这是一个简化的示例。

<div ng-repeat="block in blocks">
   <my-directive
    selected="selected[block.name]"
    block-name="block.name"
   >
   </my-directive>
</div>

2)指令代码

module.directive('myDirective', myDirective);

function myDirective() {
    return {
        restrict: 'E',
        templateUrl : 'myDirectiveTemplate.tpl.html',
        scope: {
            selected: '='
            blockName: '='
        },
        link: function ($scope) {
        }
    }
};

3)所用指令的HTML

<div>
 <div>
  <input type="text" ng-model="selected.denomination" myFunc="onCompletedListClick($parent.selected, $parent.blockName)"
   class="form-control"/>
 </div>
</div>
<button
ng-click="onCompletedListClick($parent.selected, $parent.blockName)">
                    ReSearch</button>

问题出在指令上,当使用按钮时,作用域始终带有正确的数据,在这种情况下,按Enter键将调用myFunc。

在某些情况下,我可以说四个块,当对第一个进行研究时是可以的,但是对第二个进行研究时,它使用的是第一个的范围...但是只有在按关键时,才进行研究从按钮开始似乎总是可以的。

我的问题是: 1)如何解决这个问题,我为此而疯狂 2)为什么会这样?

1 个答案:

答案 0 :(得分:0)

发现了问题。

真正的问题是缺少按钮的类型,表单内打印的字段具有按下Enter键时提交的“默认”行为。没有类型的按钮的默认值为“提交”,因此它试图提交表单,并且启动了第一个没有类型的按钮,我修复了按钮并将ng-keydown函数放在我的指令上,以正确处理Enter Key提交