2013-03-12 2 views
2

Я хотел бы знать, почему я не могу ввести более одного символа на вход в этом примере:Угловой вход ограничен 1 полукокса

http://jsfiddle.net/R3uY4/2/

<div ng-app> 
    <div ng-controller="ctrl"> 
    <table> 
      <tr> 
       <td ng-repeat="f in foo"> 
        <input ng-model="foo[$index]" style="width:60px" ></input> 
       </td> 
      </tr> 
     </table> 
    </div> 
</div> 

ЯШ:

function ctrl($scope) { 
    $scope.foo = []; 
    for (var i=0; i<5; i++) { 
     $scope.foo.push(''); 
    } 
} 

ответ

4

Вы привязываете свою модель к примитиву. Это не может работать так. Полное объяснение в этом github issue. Кроме того, ваш ng-repeat обновляется каждый раз при изменении входного значения. Вот почему вы теряете фокус.

Всегда связываются с объектами:

HTML:

<td ng-repeat="f in foo"> 
    <input ng-model="f.value" style="width:60px" /> 
</td> 

Контроллер:

function ctrl($scope) { 
    $scope.foo = []; 
    for (var i=0; i<5; i++) { 
     $scope.foo.push({value: ''}); 
    } 
} 
+0

Связано ли это с примитивным существом неизменяемым и объектным обращением? –

+0

@ plus-, примитив изменчив. Он работает таким образом из-за того, как JavaScript [прототипное наследование] (http://stackoverflow.com/questions/14049480/what-are-the-nuances-of-scope-prototypal-prototypical-inheritance-in-angularjs/14049482# 14049482) работает с угловыми областями. –

+0

@MarkRajcok потрясающая ссылка, приветствия –

1

Если вы не против использования HTML5, вы можете использовать атрибут autofocus. Просто добавьте его в поле input.

<li ng-repeat="i in items">{{i.name}} <input ng-model="i.description" autofocus></li> 

Адрес fork of your jsFiddle.

+0

Спасибо, что работает, я хотел бы понять, почему он переключает вход хотя –

+0

@ Плюс, ссылка на github, предоставленная Стьюи, объясняет потерю фокуса - см. первый ответ от mhevery/Misko. –

Смежные вопросы