重用AngularJS控制器逻辑

时间:2014-12-02 02:42:07

标签: javascript asp.net-mvc angularjs model-view-controller

这是我的应用程序中一个控制器的代码,位于用户页面中。

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() {....}
}]);

在另一个页面的Permission页面上,我创建了一个具有相同逻辑的控制器

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 个答案:

答案 0 :(得分:1)

这正是services的用途。

所以而不是:

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

你会打电话给:

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

并且:

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;
    });
}

等...

通常,所有服务器调用都应该在服务中,因此有很好的机会来改进代码学习如何正确执行。