2014-12-02 102 views
1

這是我的應用程序在用戶頁面中的一個控制器的代碼。重複使用AngularJS控制器邏輯

app.controller('UserCtrl', ['$scope', '$http', function ($scope, $http) { 

$http.get('/Users/GetUsers').success(function (data) { 
    $scope.data = data; 
}); 

this.search = function() { 
    $http.post('/Users/SearchUser', $scope.search).success(function (data) { 
     $scope.data = data; 
    }); 
} 

this.delete = function() {....} 
}]); 

在另一頁,權限頁面,我創建具有相同的邏輯

app.controller('PerCtrl', ['$scope', '$http', function ($scope, $http) { 

$http.get('/Permission/GetPermissions').success(function (data) { 
    $scope.data= data; 
}); 

this.search = function() { 
    $http.post('/Permission/SearchPermission', $scope.search).success(function (data) { 
     $scope.data = data; 
    }); 
} 

this.delete = function() {....} 
}]); 

控制器正如你看到的,唯一不同的是URL。我怎樣才能將控制器的邏輯重用到另一個?

回答

1

這正是services的用途。

所以不是:

$http.get('/Permission/GetPermissions').success(function (data) { 
    $scope.data= data; 
}); 

你會打電話來是這樣的:

permissionsService.get().then(function (data) { 
    $scope.data= data; 
}); 

和:

012:

this.search = function() { 
    $http.post('/Permission/SearchPermission', $scope.search).success(function (data) { 
     $scope.data = data; 
    }); 
} 

喜歡的東西替換

this.search = function() { 
    searchService.search().then(function (data) { 
     $scope.data = data; 
    }); 
} 

等等

一般情況下,所有的服務器調用應該是服務,無論如何,所以有提高你的代碼的一個很好的機會學習如何做是正確的。

+0

我知道這個服務,但是如果我使用服務,我仍然必須在每個控制器中聲明「搜索,刪除」。 我想要的是創建一個父控制器,其他控制器從它繼承,我只需要配置獲取和搜索,刪除...或類似的東西的URL。 – 2014-12-02 03:21:54

+0

那麼,創建一個服務,爲您做所有這些......這對於服務而不是控制器來說確實是一項工作。 – Shomz 2014-12-02 03:43:35