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 相关文章推荐
Javascript学习笔记2 函数
Jan 11 Javascript
extjs grid设置某列背景颜色和字体颜色的方法
Sep 03 Javascript
jquery查找tr td 示例模拟
May 08 Javascript
js HTML5 Canvas绘制转盘抽奖
Sep 13 Javascript
js html css实现复选框全选与反选
Oct 09 Javascript
JS中常用的消息框总结
Feb 24 Javascript
Echarts地图添加引导线效果(labelLine)
Sep 30 Javascript
微信小程序上传图片并等比列压缩到指定大小的实例代码
Oct 24 Javascript
js滚轮事件 js自定义滚动条的实现
Jan 18 Javascript
vue+element-ui JYAdmin后台管理系统模板解析
Jul 28 Javascript
JS获取当前时间戳方法解析
Aug 29 Javascript
openlayers实现图标拖动获取坐标
Sep 25 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
让的PHP代码飞起来的40条小技巧(提升php效率)
2010/04/12 PHP
php visitFile()遍历指定文件夹函数
2010/08/21 PHP
php实现计数器方法小结
2015/01/05 PHP
php上传excel表格并获取数据
2017/04/27 PHP
php利用fsockopen GET/POST提交表单及上传文件
2017/05/22 PHP
PHP标准库(PHP SPL)详解
2019/03/16 PHP
LazyLoad 延迟加载(按需加载)
2010/05/31 Javascript
js获取多个tagname的节点数组
2013/09/22 Javascript
js setTimeout opener的用法示例详解
2013/10/23 Javascript
判断复选框是否被选中的两种方法
2014/06/04 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
JavaScript 七大技巧(一)
2015/12/13 Javascript
浅析BootStrap模态框的使用(经典)
2016/04/29 Javascript
详解AngularJS中ng-src指令的使用
2016/09/07 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
jQuery实现页码跳转式动态数据分页
2017/12/31 jQuery
简单的Vue SSR的示例代码
2018/01/12 Javascript
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
element中Steps步骤条和Tabs标签页关联的解决
2020/12/08 Javascript
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python列表生成器的循环技巧分享
2015/03/06 Python
python pandas 对时间序列文件处理的实例
2018/06/22 Python
对python3中pathlib库的Path类的使用详解
2018/10/14 Python
Python3中exp()函数用法分析
2019/02/19 Python
Python学习笔记之函数的参数和返回值的使用
2019/11/20 Python
HTML5中FileReader接口使用方法实例详解
2017/08/26 HTML / CSS
html5实现移动端适配完美写法
2017/11/16 HTML / CSS
韩国三大免税店之一:THE GRAND 中文免税店
2016/07/21 全球购物
美国娱乐和流行文化商品店:FYE
2017/09/14 全球购物
Easy Spirit官网:美国休闲鞋履中的代表品牌
2019/04/12 全球购物
Timberland澳大利亚官网:全球领先的户外品牌
2019/12/10 全球购物
大学生毕业求职简历的自我评价
2013/10/24 职场文书
2014机关党员干部“正风肃纪”思想汇报
2014/09/15 职场文书
法院干警四风问题个人对照检查材料思想汇报
2014/10/07 职场文书
2015年保洁工作总结范文
2015/04/28 职场文书
2016年端午节红领巾广播稿
2015/12/18 职场文书