Ng-Model внутри Ng-Repeat (не привязка к проблеме примитивного типа)

** Редактировать: мои извинения, мой первый пример не был репрезентативным для кода, который у меня есть.

После нескольких часов исследований и испытаний я, наконец, прибегаю к этому.

Проблема в том, что я не могу обновить модель в области своих контроллеров из дочерней области моего ng-repeat. Я не перебираю примитивы, так как это, по-видимому, является общей причиной этой проблемы, более того, при попытке воспроизвести мою проблему в repl то, что я делаю, кажется, работает ... Любая помощь будет высоко оценена.

В настоящее время я использую Angular 1.2.16.

Во-первых: рабочий пример в plunker

Второй: Сломанный код

'use strict';
angular.module('myApp')
.controller('myController', [ '$scope', function ($scope) {

    $scope.object = {
        description: '',
        config: { 
            game_type: ''
        }
    };

    $scope.data = { 
        'game_types': [
            {'key': 'meow', 'val': 2},
            {'key': 'meow1', 'val': 3},
            {'key': 'meow2', 'val': 4}
        ]
    };
}]);

HTML // этот фрагмент завернут в ng-приложение, просто не включен

<div ng-controller="myController">
  <div class="row">
    <div class="col-lg-6 col-md-6 col-sm-6 col-xs-6">
      <h4>Description</h4> 
      <input class="form-control" ng-model="object.description" placeholder="Enter a Description" type="text" />
    </div>
  </div>
  <div class="row">
    <div class="col-lg-6 col-md-6 col-sm-6 col-xs-6">
      <h4>Contest Type</h4>
      <hr>
      <div class="row">
        <div class="col-lg-6 col-md-6 col-sm-6 col-xs-6">
          <div data-toggle="buttons">
            <label ng-repeat="type in data.game_types" class="btn btn-block btn-primary">
              <input ng-model="object.description" type="radio" name="game_type" ng-value="type.val">{{ type.key }}
            </label>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

Я также пытался ссылаться на родительскую область непосредственно из ng-repeat (хотя я не думаю, что мне нужно было указывать свои данные), но безрезультатно.

Я очень смущен. Из всех моих исследований это должно быть совершенно нормально. И как связано, работает на практике.

Я публикую отдельную проблему только из-за странностей, с которыми я сталкиваюсь, и потому, что предыдущие предложения, в основном касающиеся работы областей и привязки к примитивам, не кажутся проблемой.

Большое спасибо за любую помощь.


person Orloc    schedule 13.05.2014    source источник


Ответы (2)


Обновить

Похоже, вы просто использовали неправильную привязку для переключателя. Вместо привязки к object.description вы, вероятно, имели в виду привязку к object.config.game_type:

<input ng-model="object.config.game_type" type="radio" ng-value="type.val">
...

Вот обновление вашего plunkr, показывающее, что привязка работает.


Старый ответ

ng-controller применяется только к элементу, к которому вы его добавляете, и любым вложенным элементам. Итак, это все, что покрыто:

<div class="row" ng-controller="myController">
  <div class="col-lg-6 col-md-6 col-sm-6 col-xs-6">
    <h4>Description</h4> 
    <input class="form-control" ng-model="object.description" placeholder="Enter a Description" type="text" />
  </div>
</div>

Чтобы остальные элементы работали, добавьте ng-controller к окружающему элементу, например body.

person j.wittwer    schedule 13.05.2014
comment
извините, это была моя ошибка, мой первый пост не был репрезентативным для кода, который у меня есть. - person Orloc; 13.05.2014

Дерп. События начальной загрузки никогда не переключали ввод, поэтому ничего не менялось. >.‹

Извлеченный урок: начальная загрузка JS и angular не очень хорошо сочетаются друг с другом. Использование angular-ui-bootstrap и все теперь замечательно.

person Orloc    schedule 14.05.2014