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 相关文章推荐
jquery中的mouseleave和mouseout的区别 模仿下拉框效果
Feb 07 Javascript
jquery zTree异步加载简单实例分享
Feb 05 Javascript
jQuery getJSON()+.ashx 实现分页(改进版)
Mar 28 Javascript
JQuery鼠标移到小图显示大图效果的方法
Jun 10 Javascript
javascript作用域、作用域链(菜鸟必看)
Jun 16 Javascript
第五篇Bootstrap 排版
Jun 21 Javascript
jQuery多个版本和其他js库冲突的解决方法
Aug 11 Javascript
微信小程序 LOL 英雄介绍开发实例
Sep 30 Javascript
浅谈JavaScript的函数及作用域
Dec 30 Javascript
angular forEach方法遍历源码解读
Jan 25 Javascript
CheckBox多选取值及判断CheckBox选中是否为空的实例
Oct 31 Javascript
vue.js 打包时出现空白页和路径错误问题及解决方法
Jun 26 Javascript
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
linux iconv方法的使用
2011/10/01 PHP
php利用scws实现mysql全文搜索功能的方法
2014/12/25 PHP
PHP设计模式之装饰者模式代码实例
2015/05/11 PHP
PHP整合七牛实现上传文件
2015/07/03 PHP
PHPExcel简单读取excel文件示例
2016/05/26 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
laravel 5.5 关闭token的3种实现方式
2019/10/24 PHP
php提高脚本性能的4个技巧
2020/08/18 PHP
JavaScript获得选中文本内容的方法
2008/12/02 Javascript
js 单击式的下拉菜单效果实例
2013/08/13 Javascript
jQuery替换字符串(实例代码)
2013/11/13 Javascript
经过绑定元素时会多次触发mouseover和mouseout事件
2014/02/28 Javascript
jQuery中使用each处理json数据
2015/04/23 Javascript
AngularJS入门教程之更多模板详解
2016/08/19 Javascript
微信小程序图表插件(wx-charts)实例代码
2017/01/17 Javascript
js 用于检测类数组对象的函数方法
2017/05/02 Javascript
Angular2的管道Pipe的使用方法
2017/11/07 Javascript
vue+element-ui动态生成多级表头的方法
2018/08/28 Javascript
vue实现简单的日历效果
2020/09/24 Javascript
解决微信小程序中的滚动穿透问题
2019/09/16 Javascript
js回调函数仿360开机
2019/12/26 Javascript
js实现登录拖拽窗口
2020/02/10 Javascript
浅谈vue权限管理实现及流程
2020/04/23 Javascript
[05:17]DOTA2睡衣妹卖萌求签名 CJ第二天全明星影像
2013/07/28 DOTA
在Python的Flask中使用WTForms表单框架的基础教程
2016/06/07 Python
Python操作MongoDB详解及实例
2017/05/18 Python
python 函数传参之传值还是传引用的分析
2017/09/07 Python
如何在python中使用selenium的示例
2017/12/26 Python
python批量从es取数据的方法(文档数超过10000)
2018/12/27 Python
django的auth认证,authenticate和装饰器功能详解
2019/07/25 Python
通过python3实现投票功能代码实例
2019/09/26 Python
Python解压 rar、zip、tar文件的方法
2019/11/19 Python
基于python plotly交互式图表大全
2019/12/07 Python
PyCharm+PyQt5+QtDesigner配置详解
2020/08/12 Python
基层党员四风问题自我剖析材料
2014/09/29 职场文书
校园广播稿范文
2015/08/19 职场文书