对 angularjs 中的所有函数使用 1 种方法,缩减为一个函数

Use 1 method for all the function short down to one function in angularjs

您好,我正在尝试创建一个 angular 应用程序。所以这是我在我的大多数控制器中经常使用的一个功能。我可以制作一个函数或一种方法吗,这样我就可以像在 PHP.

中那样在任何地方使用这个函数吗?

这是我的功能:

var responsePromise = $http.get("http://www.somewebsite.com/api/get_category_index/");
                responsePromise.success(function(data, status, headers, config) {
                    //console.log(data);
                    $scope.PostCategories = data.categories;
                    $scope.spinner = false;
                });
                responsePromise.error(function(data, status, headers, config) {
                    alert("ajax didnt work");
                });

我有多个控制器,例如我在此处连接了 2 个控制器:

var module = angular.module('app', ['onsen', 'ngSanitize']);

module.controller('directoryControl', function($scope, $http, $rootScope) {
ons.ready(function() {
                $scope.spinner = true;
                var responsePromise = $http.get("http://www.somewebsite.com/api/get_category_index/");
                responsePromise.success(function(data, status, headers, config) {
                    //console.log(data.categories);
                    $scope.PostCategories = data.categories;
                    $scope.spinner = false;
                });
                responsePromise.error(function(data, status, headers, config) {
                    alert("ajax didnt work");
                });

                $scope.setCurrentCategory = function(categoryName){    
                       $scope.CurrentCategory = categoryName;
                     $rootScope.CurrentCategory=$scope.CurrentCategory;       
                }
    });
});

module.controller('directoryCategoryListing', function($scope, $http, $rootScope) {
ons.ready(function() {

                $scope.CurrentCategory = $rootScope.CurrentCategory;
                $scope.spinner = true;
                var CategoryWiseListingPromise = $http.get("http://www.somewebsite.com/api/get_category_posts/?slug="+$rootScope.CurrentCategory+"&count=50");
                CategoryWiseListingPromise.success(function(data, status, headers, config) {
                    //console.log(data.posts);
                    $scope.PostDetails = data.posts;
                    $scope.spinner = false;
                });
                CategoryWiseListingPromise.error(function(data, status, headers, config) {

                    alert("ajax didnt work");
                });
                $scope.setCurrentListing = function(listingName){
                       $scope.CurrentListing = listingName;
                       $rootScope.CurrentListing=$scope.CurrentListing;
                }
    });
});

所以我只想把它作为一个通用函数,我可以从控制器调用它。

同样,我对 URL 也有疑问。我想定义一个 URL 变量,我可以从所有控制器的任何地方访问它。喜欢:

var WebsiteURL = "http://www.somewebsite.com/api/"

任何人都知道我可以做到这一点!

您可以通过创建工厂并将此方法放入其中,并通过注入工厂依赖项来访问此方法来实现此目的

app.factory('DataService', fucntion($http){
  var baseUrl = "http://www.somewebsite.com/api";
  var getData = function(extendedUrl, successCallback, errorCallback){
     return $http.get(baseUrl + extendedUrl).success(successCallback).error(errorCallback);
  }
  return { 
    getData: getData
  }
});

控制器

module.controller('directoryCategoryListing', function($scope, $http, $rootScope, DataService) {
    ons.ready(function() {

        $scope.CurrentCategory = $rootScope.CurrentCategory;
        var successCallback = function(data, status, headers, config) {
            //console.log(data.posts);
            $scope.PostDetails = data.posts;
            $scope.spinner = false;
        };

        var errorCallback = function(data, status, headers, config) {
             alert("ajax didnt work");
        }
        DataService.getData("/get_category_posts/?slug=" + $rootScope.CurrentCategory + "&count=50", successCallback, errorCallback);
        $scope.setCurrentListing = function(listingName) {
            $scope.CurrentListing = listingName;
            $rootScope.CurrentListing = $scope.CurrentListing;
        }
    });
});

在控制器中,您可以通过注入 service/factory 名称进行访问,然后访问其中可用的方法。

重构代码的方法如下:

var module = angular.module('app', ['onsen', 'ngSanitize']);

module.service('DirectoryService',function(){
    var self = this;

    self.GetCategoryIndex = function(scope){
    $http.get("http://www.somewebsite.com/api/get_category_index/").success(function(data, status, headers, config) {
                //console.log(data.categories);
                scope.PostCategories = data.categories;
                scope.spinner = false;
            }).error(function(data, status, headers, config) {
                alert("ajax didnt work");
            });

}
});
module.controller('directoryControl', function($scope, $http,     $rootScope,DirectoryService) {
ons.ready(function() {
            $scope.spinner = true;

            DirectoryService.GetCategoryIndex($scope);

            $scope.setCurrentCategory = function(categoryName){    
                   $scope.CurrentCategory = categoryName;
                 $rootScope.CurrentCategory=$scope.CurrentCategory;       
            }
});
});