重复使用AngularJS控制器逻辑

问题描述:

这是我的应用程序在用户页面中的一个控制器的代码。重复使用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。我怎样才能将控制器的逻辑重用到另一个?

这正是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