2015-09-24 46 views
1

這是我的控制器代碼,用於獲取,添加和刪除客戶的簡單應用程序。我只是看了約翰帕帕2014年的演講,並儘可能地追隨他的風格指南。我在後端使用節點和mongo,並儘可能以RESTful的方式運行。我正在加載CustomersController(並使用控制器作爲語法)在部分。每次我加載我的部分並創建我的控制器的實例,我想讓所有的客戶,所以我可以顯示它們。我將$ resource查詢調用包裝在一個名爲getAll的函數中,我只是立即調用它,然後在控制器的每個回調中再次調用它以更新列表。這是可以做的還是有另一種方法,我需要採取。對於這個簡單的應用程序,還有什麼我應該避免的?ngResource的角度工廠和控制器最佳實踐

控制器:

(function() { 
    'use strict'; 

angular.module('storeApp').controller('CustomersController', CustomersController); 

CustomersController.$inject = ['CustomersFactory']; 

/* @ngInject */ 
function CustomersController(CustomersFactory) { 
    var vm = this; 

    /* RESTful Controller functions */ 

    vm.getAll = function() { 
     vm.customers = CustomersFactory.query(function() { 
      // Do stuff after getting all the customers 
     }); 
    }; 

    vm.getAll(); 

    vm.create = function(customer) { 
     CustomersFactory.save(customer, function() { 
      vm.getAll(); 
     }); 
    } 

    vm.delete = function(customer) { 
     customer.$delete(function() { 
      vm.getAll(); 
     }); 
    }; 
} 
})(); 

廠:

(function() { 
    'use strict'; 

angular.module('storeApp').factory('CustomersFactory', CustomersFactory); 

CustomersFactory.$inject = ['$resource', '$http']; 

/* @ngInject */ 
function CustomersFactory($resource, $http) { 
    return $resource('/customers/:id', { id: '@_id'}); 
} 

})(); 

所以總結了一些什麼,我很好奇:

  • 1)創建一個包裝爲getAll並從我的其他內部調用它滾輪方法好嗎?
  • 2)使用資源$ delete的實例方法比使用$ resource方法更好地將整個客戶對象從我的視圖/控制器發送到工廠?是否存在一種REST風格/最佳實踐方式來刪除客戶,而不會在網址中公開ID?
  • 3)有沒有其他的最佳做法,我違反。 (我知道我還沒有做任何錯誤處理)

回答

1

你是一個好的開始。起牀和角度運行可以是令人生畏的。

  1. 不,這是額外的開銷。您已經在內存中擁有客戶列表。更新列表中的對象,並且不需要再次檢索它們。

  2. 不管怎樣,這個id在整個客戶對象中,所以你並沒有真正隱藏它。你只是發送超過必要的數據。

  3. 這是一個非常基本的開始,但除了觸及的區域之外,我會說不。

+0

如果其他人在進行添加和刪除操作,而我正在進行添加和刪除操作,不從數據庫提取整個列表可能會導致一些混淆?或者這是套接字的主題? – Nate

+1

我曾經想過提及這是堅持你所做的一切的潛在原因。我想這實際上取決於規模,範圍等。如果您希望將業務增長到有大量客戶的地步,那麼在任何時間點檢索整個列表可能是錯誤的。 :) –

+0

有道理!感謝您的輸入! :) – Nate