首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >13-angular 思考和分析 依赖注入 -1

13-angular 思考和分析 依赖注入 -1

作者头像
西南_张家辉
发布2021-02-02 09:53:12
发布2021-02-02 09:53:12
3920
举报
文章被收录于专栏:张家辉的树屋张家辉的树屋

依赖注入

两句话明白

  • 依赖注入(Dependency Injection,简称DI)是一种软件设计模式
  • 没事别来找我,有事我会主动来找你

总结来说:

1.一个对别人有依赖的东西,它想要单独测试,就需要在依赖项齐备的情况下进行。如果我们在运行时注入,就可以减少这种依赖

2.参数由定义方决定

3.与import还不完全一样

怎么使用和使用场景

1、value
  • Value 是一个简单的 javascript 对象,用于向控制器传递值(配置阶段):
  • DEMO:
代码语言:javascript
复制
// 定义一个模块
var mainApp = angular.module("mainApp", []);

// 创建 value 对象 "defaultInput" 并传递数据
mainApp.value("defaultInput", 5);
...

// 将 "defaultInput" 注入到控制器
mainApp.controller('CalcController', function($scope, CalcService, defaultInput) {
   $scope.number = defaultInput;
   $scope.result = CalcService.square($scope.number);
   
   $scope.square = function() {
      $scope.result = CalcService.square($scope.number);
   }
});
复制代码
2、factory
  • factory 是一个函数用于返回值。在 service 和 controller 需要时创建。
  • 通常我们使用 factory 函数来计算或返回值。
  • DEMO
代码语言:javascript
复制
// 定义一个模块
var mainApp = angular.module("mainApp", []);

// 创建 factory "MathSJavaScri (创建一个依赖) 用于两数的乘积 provides a method multiply to return multiplication of two numbers
mainApp.factory('MathService', function() {
   var factory = {};
   
   factory.multiply = function(a, b) {
      return a * b
   }
   return factory;
}); 

// 在 service 中注入 factory "MathService"
mainApp.service('CalcService', function(MathService){
   this.square = function(a) {
      return MathService.multiply(a,a);
   }
});
复制代码
3、service
4、provider
  • AngularJS 中通过 provider 创建一个 service、factory等(配置阶段)。
  • Provider 中提供了一个 factory 方法 get(),它用于返回 value/service/factory。
  • DEMO
代码语言:javascript
复制
// 定义一个模块
var mainApp = angular.module("mainApp", []);
...

// 使用 provider 创建 service 定义一个方法用于计算两数乘积
mainApp.config(function($provide) {
   $provide.provider('MathService', function() {
      this.$get = function() {
         var factory = {};  
         
         factory.multiply = function(a, b) {
            return a * b; 
         }
         return factory;
      };
   });
});
复制代码
5、constant
  • 一般用来定义常量的了
代码语言:javascript
复制
mainApp.constant("configParam", "constant value");

结合来看一下实例

  • factory 注入
代码语言:javascript
复制
var mainApp = angular.module("mainApp", []);
mainApp.value("defaultInput", 5);
 
mainApp.factory('MathService', function() {
    var factory = {};
 
    factory.multiply = function(a, b) {
        return a * b;
    }
    return factory;
});
 
mainApp.service('CalcService', function(MathService){
    this.square = function(a) {
        return MathService.multiply(a,a);
    }
});
 
mainApp.controller('CalcController', function($scope, CalcService, defaultInput) {
    $scope.number = defaultInput;
    $scope.result = CalcService.square($scope.number);
 
    $scope.square = function() {
        $scope.result = CalcService.square($scope.number);
    }
});
复制代码
  • provider
代码语言:javascript
复制
var mainApp = angular.module("mainApp", []);
         
mainApp.config(function($provide) {
    $provide.provider('MathService', function() {
        this.$get = function() {
            var factory = {};
 
            factory.multiply = function(a, b) {
                return a * b;
            }
            return factory;
        };
    });
});
            
mainApp.value("defaultInput", 5);
         
mainApp.service('CalcService', function(MathService){
    this.square = function(a) {
        return MathService.multiply(a,a);
    }
});
         
mainApp.controller('CalcController', function($scope, CalcService, defaultInput) {
    $scope.number = defaultInput;
    $scope.result = CalcService.square($scope.number);
 
    $scope.square = function() {
        $scope.result = CalcService.square($scope.number);
    }
});
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 两句话明白
  • 怎么使用和使用场景
    • 1、value
    • 2、factory
    • 3、service
    • 4、provider
    • 5、constant
  • 结合来看一下实例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档