【问题标题】:Angular way to differ server model and client view model区分服务器模型和客户端视图模型的角度方式
【发布时间】:2013-05-20 10:38:45
【问题描述】:

我只是想知道在 Angular 应用中从服务器查看模型数据的最佳做法是什么?

例如,在我的控制器中,我从服务器获取模型(使用自定义 ngResource 服务),然后我需要在我的应用程序的客户端创建某种不同的模型:

customApiService.query({ url: 'items' }, function (res) {
   // made it like this and do everything in partials with "ng-repeat"?!
   $scope.items = res;

   // but i need to model server data on client...
   angular.forEach(res, function (key, i) {
     $scope.viewModel = {
        description: key.anotherNameField // e.g. different third-party services return description under different names
     };
   });
});

【问题讨论】:

    标签: javascript angularjs controller viewmodel


    【解决方案1】:

    在这种情况下,我们所做的不是直接在控制器中使用angular resource。我们创建自己的服务

    appRoot.factory('modelService', ['$resource', '$q', function ($resource, $q) {
    function ModelClass() {
       this.PropertyOne=null;
       this.PropertyTwo=null; 
    }
    var serviceObj= {
          getData: function () {
             $resource('url').query(function(data) {
                   var modelList=[];
                   //Do a foreach on each record in 'data' and create 'ModelClass' object and map properties
                   return modelList;
             });
          }
       }
      return serviceObj;
    }]);
    

    这使我们能够更好地控制向控制器公开的内容,从而控制视图。这里模型的所有权属于服务。

    由于可以在任何地方注入相同的服务,我们不必一次又一次地自定义映射。

    【讨论】:

    • @Chandermani 你是否仍然建议编写一个像上面这样的映射层来将服务器端数据模型转换为视图模型,反之亦然?
    • 我们经常使用它,它为我们提供了极大的灵活性,可以处理复杂的 UI
    猜你喜欢
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多