2013-12-20 3 views
1

Я полностью в тупике. Все работает нормально (или сейчас достаточно хорошо), и все, что мне нужно, - это вернуть данные из фабрики в формате, отличном от json. У меня есть semi-working plunker со всеми подробностями.Получение свойств объекта из фабрики angularjs

В принципе, первая страница (под контроллером Ctrl) - это то, где пользователь может проверять кучу ящиков. Существует также ng-переключатель между наборами опций (реальные вещи - это намного больше, чем их больше), поэтому checkboxFactory поддерживает выбор пользователя. Когда пользователь переходит на следующую страницу (или «следующую страницу» в плункере, потому что подделывает ее), они могут видеть, что они выбрали. Затем эти варианты будут завернуты в сообщение json обратно на сервер. Мне нужно показать удобное имя, но также иметь идентификатор № выбора для сервера.

Если я положил значение = "{{item.name}}" в исходном флажке ng-repeat, все в порядке. За исключением того факта, что тогда у меня есть фабрика имен, а не требуемых сервером идентификаторов. Выполнение второго массива на заводе (один для выбранных имен, один для соответствующих выбранных идентификаторов) кажется излишним, когда теоретически я могу просто добавить каждый выбор в качестве объекта и извлечь свойства по мере необходимости на второй странице.

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

[ "{\"id\":1,\"name\":\"Firstplace\"}", "{\"id\":2,\"name\":\"Second place\"}" ] 

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

if (checked && index == -1) { 
    if (setup) elem.prop('checked', false); 
    else scope.list.push({ 
     id:"scope.value.id", 
     name:"scope.value.name" 
    }); 

На HTML стороны, не нравится ни одна из вариаций, которые я пробовал в нг-повторе, либо. Кажется, что источником всех кошмаров является то, что нажатие создает искаженный json. Я попробовал все эти второй страницы/вывода:

{{item}} 
{{item.name}} 
{{item.item.name}} 

Единственное, что работает это {{пункт}} и не удивительно, что это довольно некрасиво. Кто-нибудь сталкивался с этим раньше, и есть какие-то намеки на то, как это исправить? Спасибо заранее.

ответ

1

, используя @, превратит ваш объект в строку, вы должны просто использовать ссылку на свой объект item и использовать =.

{{item}} Изменение только item в качестве ссылки:

<input type="checkbox" name="group1" value="item" ng-model="isChecked" checkbox-list='checkedCity' /> 

В директиве использования =:

scope: { 
    list: '=checkboxList', 
    value: '=' 
}, 

см updated plunker

+0

Я не уверен в том, чтобы танцевать в радости, что это было так легко, или повесить мою голову в позоре для полного отсутствия @ детали. Большое большое спасибо! – kl02

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