0

自动完成在单个文本字段中工作正常,就像在id =“1”的文本字段中一样,我在“scope.SelectedICD9Code”中获取数据,但是当我尝试相同的东西在NG-重复,它的记录数据,但不可访问,对于其他功能..AngularJS:自动完成指令不能在ng-repeat内工作

var app = angular.module("PEMR", []); 

    app.directive('icd9AutoComplete', function ($timeout) { 
     return function (scope, Element, Attrs) { 
      Element.autocomplete({ 
       source: function (request, response) { 
        PageMethods.SearchICD9ByDescription(request.term, function (data) { 
         response(data); 
        }); 
       }, 
       minLength: 2, 
       select: function (event, ui) { 
        scope.SelectedICD9Code = ui.item; 
        console.log(scope.SelectedICD9Code); 
        $timeout(function() { 
         Element.trigger('input'); 
        }, 0); 
       } 
      }); 
     }; 
    }); 

我的HTML

<input id="1" icd9-auto-complete ui-items="names"> 

<div ng-repeat="Suppose 1 to 5" > 
<input id="2" icd9-auto-complete ui-items="names"> 
</div> 

这里怎么我访问所选数据

$scope.SomeFunction= function() { 
console.log($scope.SelectedICD9Code); 
} 
+0

你是否在'ng-repeat'内改变了''的''id'?否则,你将有5个元素具有相同的ID,这是无效的。 – przno

+0

是的,我改变了,但我认为这并不重要。 –

回答

0

该问题似乎与您的范围有关。 ng-repeat为每个元素创建新的子作用域,因此第一个输入(id 1)的作用域为父作用域,ng-repeat创建5个此父作用域的新子作用域。子范围从父范围(JavaScript的多态继承性质)获取names等没有问题,但子范围将ui.item的值分配给范围不是父作用域的作用域的$scope.SelectedICD9Code作为子作用域。

请参阅http://jimhoskins.com/2012/12/14/nested-scopes-in-angularjs.html以获取更长的解释并查看其他问题Angularjs: set parent directive scope value with child directive以获取有关如何获取子范围以更改父项的更多详细信息。