AngularJS 依赖注入详解及示例代码


Posted in Javascript onAugust 17, 2016

依赖注入是一个在组件中给出的替代了硬的组件内的编码它们的依赖关系的软件设计模式。这减轻一个组成部分,从定位的依赖,依赖配置。这有助于使组件可重用,维护和测试。

AngularJS提供了一个至高无上的依赖注入机制。它提供了一个可注入彼此依赖下列核心组件。

工厂

服务

提供者

常值


值是简单的JavaScript对象,它是用来将值传递过程中的配置相位控制器。

//define a module
var mainApp = angular.module("mainApp", []);
//create a value object as "defaultInput" and pass it a data.
mainApp.value("defaultInput", 5);
...
//inject the value in the controller using its name "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);
  }
});

工厂

工厂是用于返回函数的值。它根据需求创造值,每当一个服务或控制器需要。它通常使用一个工厂函数来计算并返回对应值

//define a module
var mainApp = angular.module("mainApp", []);
//create a factory "MathService" which 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;
}); 

//inject the factory "MathService" in a service to utilize the multiply method of factory.
mainApp.service('CalcService', function(MathService){
   this.square = function(a) { 
   return MathService.multiply(a,a); 
  }
});
...

服务

服务是一个单一的JavaScript包含了一组函数对象来执行某些任务。服务使用service()函数,然后注入到控制器的定义。

//define a module
var mainApp = angular.module("mainApp", []);
...
//create a service which defines a method square to return square of a number.
mainApp.service('CalcService', function(MathService){
   this.square = function(a) { 
   return MathService.multiply(a,a); 
  }
});
//inject the service "CalcService" into the controller
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);
  }
});

提供者

提供者所使用的AngularJS内部创建过程中配置阶段的服务,工厂等(相AngularJS引导自身期间)。下面提到的脚本,可以用来创建,我们已经在前面创建MathService。提供者是一个特殊的工厂方法以及get()方法,用来返回值/服务/工厂。

//define a module
var mainApp = angular.module("mainApp", []);
...
//create a service using provider which defines a method square to return square of a number.
mainApp.config(function($provide) {
  $provide.provider('MathService', function() {
   this.$get = function() {
     var factory = {}; 
     factory.multiply = function(a, b) {
      return a * b; 
     }
     return factory;
   };
  });
});

常量

常量用于通过配置相位值考虑事实,值不能使用期间的配置阶段被传递。

mainApp.constant("configParam", "constant value");

例子

下面的例子将展示上述所有指令。

testAngularJS.html

<html>
<head>
  <title>AngularJS Dependency Injection</title>
</head>
<body>
  <h2>AngularJS Sample Application</h2>
  <div ng-app="mainApp" ng-controller="CalcController">
   <p>Enter a number: <input type="number" ng-model="number" />
   <button ng-click="square()">X<sup>2</sup></button>
   <p>Result: {{result}}</p>
  </div>
  <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>
  <script>
   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.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);
     }
   });
  </script>
</body>
</html>

结果

在Web浏览器打开textAngularJS.html。看到结果如下。

AngularJS 依赖注入详解及示例代码

以上就是对AngularJS 依赖注入的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!

Javascript 相关文章推荐
Sample script that displays all of the users in a given SQL Server DB
Jun 16 Javascript
JS的递增/递减运算符和带操作的赋值运算符的等价式
Dec 08 Javascript
浅谈Javascript Base64 加密解密
Dec 28 Javascript
原生js结合html5制作小飞龙的简易跳球
Mar 30 Javascript
详解jQuery中的元素的属性和相关操作
Aug 14 Javascript
全面解析Bootstrap表单使用方法(表单控件状态)
Nov 24 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
Dec 11 Javascript
jquery滚动条插件slimScroll使用方法
Feb 09 Javascript
Bootstrap学习笔记之进度条、媒体对象实例详解
Mar 09 Javascript
node通过npm写一个cli命令行工具
Oct 12 Javascript
VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法
Apr 17 Javascript
JQuery复选框全选效果如何实现
May 08 jQuery
AngularJS 服务详细讲解及示例代码
Aug 17 #Javascript
深入理解jQuery layui分页控件的使用
Aug 17 #Javascript
AngularJS 作用域详解及示例代码
Aug 17 #Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
Aug 17 #Javascript
jQuery Easyui使用(二)之可折叠面板动态加载无效果的解决方法
Aug 17 #Javascript
js实现添加可信站点、修改activex安全设置,禁用弹出窗口阻止程序
Aug 17 #Javascript
Node.js中使用jQuery的做法
Aug 17 #Javascript
You might like
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
2012/04/09 PHP
PHP 第二节 数据类型之字符串类型
2012/04/28 PHP
一个基于phpQuery的php通用采集类分享
2014/04/09 PHP
destoon实现底部添加你是第几位访问者的方法
2014/07/15 PHP
PHP邮件发送类PHPMailer用法实例详解
2014/09/22 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
javascript标签在页面中的位置探讨
2013/04/11 Javascript
JavaScript 上万关键字瞬间匹配实现代码
2013/07/07 Javascript
解析页面加载与js函数的执行 onload or ready
2013/12/12 Javascript
node.js中的fs.mkdirSync方法使用说明
2014/12/17 Javascript
JavaScript电子时钟倒计时第二款
2016/01/10 Javascript
Angular.js回顾ng-app和ng-model使用技巧
2016/04/26 Javascript
Vue单文件组件基础模板小结
2017/08/10 Javascript
vue的三种图片引入方式代码实例
2019/11/19 Javascript
Threejs实现滴滴官网首页地球动画功能
2020/07/13 Javascript
在Python的Flask框架下收发电子邮件的教程
2015/04/21 Python
对numpy中数组元素的统一赋值实例
2018/04/04 Python
python 3.6.5 安装配置方法图文教程
2018/09/18 Python
实例讲解Python中整数的最大值输出
2019/03/17 Python
PyTorch使用cpu加载模型运算方式
2020/01/13 Python
Python利用FFT进行简单滤波的实现
2020/02/26 Python
web页面录屏实现
2019/02/12 HTML / CSS
HTML 5 input placeholder 属性如何完美兼任ie
2014/05/12 HTML / CSS
web字体加载方案优化小结
2019/11/29 HTML / CSS
全球采购的街头服饰和帽子:Urban Excess
2020/10/28 全球购物
《十六年前的回忆》教学反思
2014/02/14 职场文书
打架检讨书2000字
2014/02/22 职场文书
企业安全生产责任书
2014/04/14 职场文书
党员自我剖析材料(群众路线)
2014/10/06 职场文书
小学母亲节活动总结
2015/02/10 职场文书
主持人开场白台词
2015/05/29 职场文书
宾馆卫生管理制度
2015/08/06 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书
情况说明书格式及范文
2019/06/24 职场文书
探讨Java中的深浅拷贝问题
2021/06/26 Java/Android
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS