2016-03-16 1 views
1

У меня есть нг-повтор, который выглядит следующим образом:Как ориентироваться на конкретные поля в Firebase/AngularFire, когда более чем 1 уровень глубокой

<div ng-repeat="field in fields"> 
    {{field.label}} 

    <div ng-repeat="choice in field.choices track by $index"> 
     #{{$index+1}} <input type="text" ng-model="choice.value" ng-change="fields.$save(field)"> 
     <a ng-click="field.choices.$remove(choice)">Remove</a> 
    </div> 
</div> 

Как вы можете видеть, это 2 уровней вложенности это имеет выбор внутри из каждого поля, я не могу понять, как удалить определенный выбор при нажатии, я пробовал field.choices.$remove(choice), но ничего не делает, когда я сделал fields.$remove(field), он удаляет все поле, а когда я сделал fields.$remove(choice) или field.$remove(field.choices), он не делает, Я тоже ничего не делаю.

Вот как fields инициируют:

var fieldsRef = firebase.child('Fields'); 
$scope.fields = $firebaseArray(fieldsRef); 
+0

Пожалуйста, пост код контроллера, где 'инициализируется fields'. –

+0

@AnidMonsur ok Я опубликовал, как он был создан с использованием $ firebaseArray() – Jordash

ответ

2

$scope.fields является $firebaseArray. Но свойство choices в пределах поля не. Поэтому вы не можете позвонить field.choices.$remove().

Решение для ng-click для вызова функции в вашем контроллере, чтобы удалить выбор из поля, а затем позвонить $scope.fields.$save(field).

<a ng-click="$scope.removeChoiceFromField(choice, field)">Remove</a> 

Контроллер:

$scope.removeChoiceFromField = function(choice, field) { 
    var i = field.choices.indexOf(choice); 
    if(i != -1) { 
     field.choices.splice(i, 1); 
     $scope.fields.$save(field); 
    } 
}; 
+2

Хорошо найденная Anid. Я также укажу, что вложенные списки, подобные этому, являются [рекомендуемыми в документации Firebase] (https://www.firebase.com/docs/web/guide/structuring-data.html#section-nested) , –

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