Я пытаюсь создать динамическую форму на основе объекта. Например: Я хотел бы, что сгенерированные полей выбора будет содержать параметры, если задано, в противном случае завод будет получать их с помощью Ajax, что-то вроде этого:
Markup:
<select ng-repeat="select in selects"
ng-init="options = refactor.options(select)"
ng-options="option in options">
</select>
Контроллер:
myApp.controller('MyCtrl', function($scope, refactor) {
$scope.refactor = refactor;
$scope.selects = [
{ text: "Country", value="chosen.country", options=["France", "England"] },
{ text: "Gender", value="chosen.gender", options="/gender" }
]
});
Фабрика:
myApp.factory('refactor', function($scope, $http) {
return {
options: function(select) {
if(typeof(select.options) === 'object') { return select.options };
// otherwise assume select.options is
// a path to fetch options by ajax:
$http.get(select.options).success(function(data) {
select.options = data; // data == ['male', 'female']
});
return []; // placeholder until promise is fulfilled
}
}
})
данные ($ scope.selects) г ets обновляется, как ожидалось, но DOM не является, что, вероятно, означает, что refactor.options() не будет снова вызван в ответ на изменение. Я попытался принудительно выполнить обновление, передав объект области на фабрику и применив к нему $ apply, но он не работает.
Что мне не хватает?
попробовать это, если он работает 'нг-параметры = «option in select.options» ' – Abdul23
На первой итерации один из вариантов ионы vars - это строка (путь, '/ gender'), которая не является итерируемой и, вероятно, вызывает исключение. – Kludge
@ Abdul23, ваше общее направление было истинным в конце концов: переменная, которую я инициализировала в ng-init, не повлияла после обновления select.options, поэтому итерация select.options вместо этого в конечном итоге решила проблему. Я предлагаю вам опубликовать это как ответ. Благодарю. – Kludge