2014-01-07 2 views
0

Надеюсь, я могу понять, что я имею в виду.Как отделить модели данных и модели локальных данных от углового?

Предположим, у меня есть ресурс car. Автомобиль имеет атрибуты color, name или что угодно.

Я получаю список автомобилей, пользующихся услугами, что-то вроде cars.index().

Но в интерфейсе у меня есть все автомобили, и когда я нажимаю на один автомобиль, появляется небольшое всплывающее окно, отображающее входы для редактирования color и name.

И вот проблема. Где я могу сохранить атрибут displayingInputs?

  1. Следует ли сохранять его непосредственно в ресурсе автомобиля, а затем просто отправлять исходные атрибуты при отправке на обновленный ресурс?

  2. Должен ли я создать новую услугу под названием carWidget или что-то вдоль линий, что каждый из них имеет что-то вроде:

    { 
        car: cars.get(carId), 
        displayingInputs: false 
    } 
    
  3. Должен ли я хранить displayingInputs внутри рамки с carWidget директивы? Что произойдет, если мне нужно изменить «displayInputs» из родительской области? (например, при создании кнопки «показать все»/«скрыть все»)

  4. Что-то еще?

Мой лучший выбор # 3, но я не знаю, как я должен получить доступ к displayingInputs снаружи виджета.

+1

очень полезный пример: http://docs.angularjs.org/api/angular.copy – michael

+0

В чем цель 'displayInputs'? – zeroflagL

+0

displayInputs будет логическим значением, указывающим, отображаются ли входы для этого автомобиля или нет. – Zequez

ответ

1

Если вы хотите, чтобы ваша модель car была чистой, вы можете иметь отдельную переменную editedCar и отображать каждое всплывающее окно с ng-show="car == editedCar".

Если несколько автомобилей могут быть отредактированы одновременно, editedCars может быть ассоциативным массивом (идентификатор автомобиля = логический) и отображать всплывающие окна, используя ng-show="editedCars[car.id]".

Другой способ не отправлять определенные свойства автомобиля - это префикс их имени знаком $. Это было просто использование car.$displayingInputs. Будьте внимательны при столкновении имен, поскольку Angular использует этот префикс для хранения внутренних данных.

От angular.toJson doc:

Сериализует ввод в строку JSON-формат. Свойства с лидирующими $ символами будут разделены, поскольку угловая использует эту ноту внутренне.

+0

Прохладный, не знал о свойствах префикса с помощью $. Но нормально использовать? Я имею в виду, подтверждает ли документация использование этого метода при выполнении подобных действий? – Zequez

+1

Я не нашел этого явно.Записываются свойства снятия, начинающиеся с $. Единственное, что не является будущим доказательством, это то, что ваше имя свойства может столкнуться со следующей версией Angular. Если вы называете свое свойство «$ myCompanyNameDisplayingInputs», вы довольно безопасны. – Mart

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