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 flash下fromCharCode和charCodeAt方法使用说明
Jan 12 Javascript
jQuery EasyUI API 中文文档 - Form表单
Oct 06 Javascript
JavaScript实现信用卡校验方法
Apr 07 Javascript
javascript省市级联功能实现方法实例详解
Oct 20 Javascript
jQuery查看选中对象HTML代码的方法
Jun 17 Javascript
Google 地图获取API Key详细教程
Aug 06 Javascript
AngularJS 实现弹性盒子布局的方法
Aug 30 Javascript
jquery插件bootstrapValidator数据验证详解
Nov 09 Javascript
使用jQuery.Pin垂直滚动时固定导航
May 24 jQuery
微信小程序实现动态显示和隐藏某个控件功能示例
Dec 14 Javascript
使用Three.js实现太阳系八大行星的自转公转示例代码
Apr 09 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
Jul 19 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
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
PHP输出控制功能在简繁体转换中的应用
2006/10/09 PHP
PHP的运行机制与原理(底层)
2015/11/16 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
2016/10/13 PHP
PHP实现的折半查询算法示例
2017/10/09 PHP
PHP面向对象程序设计继承用法简单示例
2018/12/28 PHP
ThinkPHP5框架中使用JWT的方法示例
2020/06/03 PHP
javascript iframe中打开文件,并检测iframe存在否
2008/12/28 Javascript
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
2010/03/07 Javascript
利用ajaxfileupload插件实现文件上传无刷新的具体方法
2013/06/08 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
浅谈JavaScript中的Math.atan()方法的使用
2015/06/14 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
Node.js的Koa框架上手及MySQL操作指南
2016/06/13 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
2017/02/12 Javascript
yii form 表单提交之前JS在提交按钮的验证方法
2017/03/15 Javascript
ES6中Proxy代理用法实例浅析
2017/04/06 Javascript
微信小程序表单验证错误提示效果
2017/05/19 Javascript
pace.js和NProgress.js两个加载进度插件的一点小总结
2018/01/31 Javascript
浅谈AngularJS中$http服务的简单用法
2018/05/15 Javascript
vue.js响应式原理解析与实现
2020/06/22 Javascript
Vue 实现展开折叠效果的示例代码
2018/08/27 Javascript
浅谈Python单向链表的实现
2015/12/24 Python
Python提取Linux内核源代码的目录结构实现方法
2016/06/24 Python
快速实现基于Python的微信聊天机器人示例代码
2017/03/03 Python
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
Python获取二维矩阵每列最大值的方法
2018/04/03 Python
详解mac python+selenium+Chrome 简单案例
2019/11/08 Python
python手写均值滤波
2020/02/19 Python
PyQt5+python3+pycharm开发环境配置教程
2020/03/24 Python
Python内建序列通用操作6种实现方法
2020/03/26 Python
python如何编写win程序
2020/06/08 Python
德国机车企业:FC-Moto
2017/10/27 全球购物
Topshop法国官网:英国快速时尚品牌
2018/04/08 全球购物
巴西体育用品商店:Lojão dos Esportes
2018/07/21 全球购物
费用会计岗位职责
2014/01/01 职场文书