AngularJS $get

半兽人 发表于: 2025-02-11   最后更新时间: 2025-02-11 16:05:31  
{{totalSubscript}} 订阅, 41 游览

$get 介绍

在 AngularJS 中,$getprovider 的一个方法,用于定义和返回服务的实例。当 AngularJS 需要创建这个服务时,就会调用 $get 方法,并且所有使用这个服务的地方都会共享这个实例(单例模式)。

基本用法

angular.module("myApp", [])
    .provider("mathService", function () {
        var factor = 1;

        this.setFactor = function (value) {
            factor = value;
        };

        this.$get = function () {
            return {
                multiply: function (num) {
                    return num * factor;
                }
            };
        };
    })
    .config(function (mathServiceProvider) {
        mathServiceProvider.setFactor(10);
    })
    .controller("MainController", function ($scope, mathService) {
        $scope.result = mathService.multiply(5); // 5 * 10 = 50
    });

$get 的执行时机

  1. AngularJS 启动时config() 里的 provider 代码会执行,但 $get 还不会运行。
  2. 当某个地方第一次使用 mathService$get 里的代码才会执行,并返回服务实例。
  3. 后续调用 mathService 时,不会重复执行 $get,而是直接复用之前创建的实例(单例模式)。

为什么要用 $get

  • 允许在 config() 阶段修改服务的参数。
  • 采用单例模式,保证全局只有一个实例,不会重复创建。
  • 提供比 factoryservice 更强的控制能力,例如可以动态返回不同的服务实例。

$get vs factory vs service

方法 适用场景 允许在 config() 配置 需要手动 return 对象
provider 需要在 config() 里修改参数
factory 普通服务
service 面向对象风格 否(使用 this

什么时候使用 $get

需求 适合方式
需要在 config() 阶段修改参数(如 API URL) provider(使用 $get 创建服务)
普通的数据共享、工具类 factoryservice
需要 new 生成对象实例 service

适用于 config() 配置的示例

angular.module("myApp", [])
    .provider("apiService", function () {
        var apiUrl = "https://default-api.com";

        this.setApiUrl = function (url) {
            apiUrl = url;
        };

        this.$get = function ($http) {
            return {
                getData: function () {
                    return $http.get(apiUrl);
                }
            };
        };
    })
    .config(function (apiServiceProvider) {
        apiServiceProvider.setApiUrl("https://my-custom-api.com");
    })
    .controller("MainController", function ($scope, apiService) {
        apiService.getData().then(function (response) {
            $scope.data = response.data;
        });
    });

总结

  • $get 主要用于 provider 里,告诉 AngularJS 如何创建这个服务。
  • 如果需要在 config() 里先修改参数,再在 run() 里使用,必须用 provider
  • 如果不需要在 config() 里改参数,直接用 factory 就行了,更简单。
更新于 2025-02-11
在线,8小时前登录

查看AngularJS更多相关的文章或提一个关于AngularJS的问题,也可以与我们一起分享文章