2013-04-15 3 views
0

Я новичок в angularjs, и в своем приложении я делаю вызов API REST и возвращаемый ответ сохраняется как объект модели. По моему мнению, я создал отдельный объект модели представления, поскольку ответ от API не может быть таким, как он используется в пользовательском интерфейсе.Модель использования данных AngularJS

Это правильный подход? Обратите внимание, что я использую две разные модели -> Один получает данные с сервера, а другой используется в качестве модели подбора интерфейса. Это похоже на бэк-компонент и объекты DAO в Java-инфраструктурах.

Просьба сообщить, подходит ли этот подход или его следует изменить. Если да, то как?

Update проиллюстрировали вопрос в http://jsfiddle.net/LGEKX/

function mycontroller($scope){ 
//The view model is populated by a seperate method 
var viewmodel = populateViewModel(); 
$scope.viewmodel = viewmodel; 
} 

function populateViewModel(){ 
//Call service to update local model 
var backendModel = serviceCall(); 
//Invoke conversion service 
var converteModel = convertBackEndModel(backendModel); 
} 

function serviceCall(){ 
//Service method calls server side API and the data returned is returned in success  callback 
$http({method: 'GET', url: '/someUrl'}). 
    success(function(data, status, headers, config) { 
    return data; 
}). 
error(function(data, status, headers, config) { 
    ... 
    }); 

} 

function convertBackEndModel(data){ 
    //This takes the data returned from API call as input and creates a view model 
    //which will be used for angularjs view (in HTML) 
var viewModel = {}; 
viewModel.name = backendModel.backendName; 
//Though this is simple, actual code has lots of logic which basically converts one JSON structure to another 
} 

и в моем HTML

<div ng-app> 
<div ng-controller="mycontroller"> 
    <!-- Binding to viewmodel from the HTML--> 
    <div ng-model="viewmodel.name"></div> 
</div> 

+0

Без какого-либо кода и дальнейших объяснений этот вопрос трудно понять для кого-то еще. – TheHippo

+0

AngularJS работает иначе, чем традиционные приложения Java/.NET (MVC или MVVM). Совершенно необязательно иметь отдельный набор классов. JavaScript - это динамический язык, и вам легко приложить дополнительные свойства к вашей модели, не мешая управлять двусторонней связью между представлением и контроллером. Вы можете напрямую использовать ответ от службы. Пожалуйста, проверьте документацию на AngularJS и некоторые интересные видео на Youtube, чтобы получить представление об использовании шаблонов. – Ketan

+0

@ Ketan Я понимаю, что мы можем динамически присоединить свойства к модели. Но можете ли вы, пожалуйста, разработать шаблон дизайна, который следует соблюдать здесь. Обычно я отделяю модель пользовательского интерфейса и модель уровня persistence и имею объект передачи данных, который делает преобразование между ними в случае серверных языков. Я понимаю, что могу пропустить его и напрямую привязать к той же модели, но в моем случае я предпочел бы отдельную модель для представления. Мне нужно знать, является ли это предпочтительной практикой. Пожалуйста, совет: – Raghav

ответ

0

Вот простой шаблон с помощью $ HTTP, чтобы сделать вызов сервер, а затем html для привязки к переменной области

$http({ 
       url: "http://localhost/people/1" 
      }).success(function (data, status, headers, config) { 
       if (data) { 
        $scope.person = data; 
       } 
      }); 



<div>{{person.firstName}}</div> <!-- one way --> 
<input ng-model='person.firstName' /> <!-- two way --> 

Единственная причина, я думаю, что вы, возможно, потребуется отдельный DTO есть, если GET и PUT службы используют различные классы, в этом случае вам нужно будет массировать данные.

+0

Я только что видел ваше обновление. Как я уже упоминал выше, на самом деле нет необходимости создавать отдельную виртуальную машину, и это не является обязательным шаблоном в AngularJS, и это не лучшая практика. – Ketan

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