2015-03-13 81 views
3

我遇到過很多文章,展示瞭如何將業務邏輯從控制器中分離出來,並將它們保存在不同的層中。至於角度,我們添加所有的邏輯在我們的服務,工廠等在AngularJS中將業務邏輯從控制器中分離出來

但我已經遇到了下面的代碼行

angular.module('myApp').controller(function($scope,$userService) {  
    $scope.users = $userService.get('/users');  
    $scope.add = function() { 
    // do something 
    };  
}); 

,人們仍然認爲,我們仍然在增加我們的邏輯控制器。如果這是真的,那麼在我的控制器中初始化數據的最佳方法是什麼,以便我可以避免在控制器中使用邏輯,或者可以幫助我實現這些邏輯的任何最佳實踐。

P.S我正在嚴格要求Angular的建議。

+0

我只是試圖綁定控制器(數據和函數)中的數據,所有其他邏輯保持服務。我認爲只有在頁面上顯示數據的邏輯。 – Mikalai 2015-03-13 13:24:48

回答

2

在給出的代碼示例中,您可以使用資源(https://docs.angularjs.org/api/ngResource/service/ $ resource)來抽象URL詳細信息。然後,代碼可能如下:

angular.module('myApp').controller(function($scope,Users) {  
    $scope.users = Users.query();  
    $scope.add = function() { 
    // do something 
    };  
}); 

我假設的添加功能鏈接到與模板的NG擊事件,這看起來不錯在這種情況下。如果代替//做點什麼有很多代碼可能會被移入服務。

從AngularJS Docs摘自:

控制器是「類」或者是 負責提供支持模板 聲明標記的應用程序的行爲「構造函數」。

作爲一個經驗法則,如果它不是應用程序行爲,例如更新模型,處理點擊事件等,然後抽象成服務。

2

控制器中肯定存在「邏輯」,但邏輯應限於定義ViewModel並通過對View和Model中的事件作出反應來改變它。

該邏輯處理應用程序的狀態或應用程序視圖的一部分,控制器爲其授權。

邏輯應該是而不是在控制器中與後端知識,操縱模型的數據,操縱View/DOM,業務邏輯不直接相關的數據是如何分級介紹。

您的示例沒有問題,但"/users"部分除外,該部分可能受益於在服務中被抽象化。

相關問題