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 相关文章推荐
Ajax,UTF-8还是GB2312 eval 还是execScript
Nov 13 Javascript
不安全的常用的js写法
Sep 15 Javascript
javascript中有趣的反柯里化深入分析
Dec 05 Javascript
Extjs单独定义各组件的实例代码
Jun 25 Javascript
jQuery回调函数的定义及用法实例
Dec 23 Javascript
js随机生成网页背景颜色的方法
Feb 26 Javascript
在JavaScript中使用对数Math.log()方法的教程
Jun 15 Javascript
javascript中select下拉框的用法总结
Jan 07 Javascript
简单理解vue中track-by属性
Oct 26 Javascript
jquery使用FormData实现异步上传文件
Oct 25 jQuery
vue实现路由不变的情况下,刷新页面操作示例
Feb 02 Javascript
谈一谈vue请求数据放在created好还是mounted里好
Jul 27 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获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
2012/09/23 PHP
PHP中将ip地址转成十进制数的两种实用方法
2013/08/15 PHP
ThinkPHP调试模式与日志记录概述
2014/08/22 PHP
php使用pdo连接sqlite3的配置示例
2016/05/27 PHP
thinkPHP的表达式查询用法详解
2016/09/14 PHP
PHP运用foreach神奇的转换数组(实例讲解)
2018/02/01 PHP
表单(FORM)的一些实用效果代码
2007/03/25 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
2015/02/18 Javascript
JS运动基础框架实例分析
2015/03/03 Javascript
jQuery获取table行数并输出单元格内容的实现方法
2016/06/30 Javascript
纯原生js实现table表格的增删
2017/01/05 Javascript
jQuery实现切换隐藏与显示同时切换图标功能
2017/10/29 jQuery
vue-cli创建的项目,配置多页面的实现方法
2018/03/15 Javascript
node实现登录图片验证码的示例代码
2018/04/20 Javascript
详解Vue项目部署遇到的问题及解决方案
2019/01/11 Javascript
vue踩坑记-在项目中安装依赖模块npm install报错
2019/04/02 Javascript
在Python中操作列表之List.append()方法的使用
2015/05/20 Python
Python实现的文本对比报告生成工具示例
2018/05/22 Python
Python中文件的写入读取以及附加文字方法
2019/01/23 Python
python解析命令行参数的三种方法详解
2019/11/29 Python
6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
2020/01/06 Python
python使用numpy实现直方图反向投影示例
2020/01/17 Python
python 控制台单行刷新,多行刷新实例
2020/02/19 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
2020/12/23 Python
canvas如何绘制钟表的方法
2017/12/13 HTML / CSS
Paul’s Boutique官网:英国时尚手袋品牌
2018/03/31 全球购物
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
阿迪达斯希腊官方网上商店:adidas希腊
2019/04/06 全球购物
Derek Rose官网:英国高档睡衣、家居服和内衣品牌
2020/01/18 全球购物
Myprotein比利时官方网站:欧洲第一运动营养品牌
2020/10/04 全球购物
abstract class和interface有什么区别?
2012/01/03 面试题
jQuery treeview树形结构应用
2021/03/24 jQuery
俄语专业毕业生求职信
2014/07/12 职场文书
入党积极分子自我批评思想汇报
2014/10/10 职场文书
MySQL安装后默认自带数据库的作用详解
2021/04/27 MySQL