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调用C#代码
Jan 17 Javascript
javascript实现详细时间提醒信息效果的方法
Mar 11 Javascript
深入分析JSON编码格式提交表单数据
Jun 25 Javascript
JavaScript简单修改窗口大小的方法
Aug 03 Javascript
jQuery grep()方法详解及实例代码
Oct 30 Javascript
js实现仿购物车加减效果
Mar 01 Javascript
weex里Vuex state使用storage持久化详解
Sep 09 Javascript
javascript基于定时器实现进度条功能实例
Oct 13 Javascript
关于Webpack dev server热加载失败的解决方法
Feb 22 Javascript
JS中的JSON对象的定义和取值实现代码
May 09 Javascript
基于JavaScript实现每日签到打卡轨迹功能
Nov 29 Javascript
JS字符串和数组如何实现相互转化
Jul 02 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数据缓存的使用说明
2013/05/10 PHP
php获取当前时间的毫秒数的方法
2014/01/26 PHP
php截取字符串函数分享
2015/02/02 PHP
js parentElement和offsetParent之间的区别
2010/03/23 Javascript
网站404页面3秒后跳到首页的实例代码
2013/08/16 Javascript
JavaScript改变HTML元素的样式改变CSS及元素属性
2013/11/12 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
JavaScript代码应该放在HTML代码哪个位置比较好?
2014/10/16 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
jquery实现鼠标滑过显示二级下拉菜单效果
2015/08/24 Javascript
网页挂马方式整理及详细介绍
2016/11/03 Javascript
JS如何生成一个不重复的ID的函数
2016/12/25 Javascript
jQuery获取table表中的td标签(实例讲解)
2017/07/28 jQuery
jQuery实现用户信息表格的添加和删除功能
2017/09/12 jQuery
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
2018/11/01 NodeJs
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
[14:36]2014 DOTA2国际邀请赛中国区预选赛5.21 Orenda VS NE
2014/05/22 DOTA
将Python代码嵌入C++程序进行编写的实例
2015/07/31 Python
Python六大开源框架对比
2015/10/19 Python
基于Python的接口测试框架实例
2016/11/04 Python
Python实现嵌套列表去重方法示例
2017/12/28 Python
Python 利用内置set函数对字符串和列表进行去重的方法
2018/06/29 Python
python3 实现对图片进行局部切割的方法
2018/12/05 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
pytorch 自定义数据集加载方法
2019/08/18 Python
python中return的返回和执行实例
2019/12/24 Python
Belle Maison倍美丛官网:日本千趣会旗下邮购网站
2016/07/22 全球购物
英国轻奢珠宝品牌:Astley Clarke
2016/12/18 全球购物
Clarins娇韵诗英国官网:来自法国的天然护肤品牌
2017/04/18 全球购物
阿波罗盒子:Apollo Box
2017/08/14 全球购物
阿里巴巴美国:Alibaba美国
2019/11/24 全球购物
酒店服务员岗位职责
2015/02/09 职场文书
惊涛骇浪观后感
2015/06/05 职场文书
2015年教师节主持词
2015/07/03 职场文书
2015初一年级组工作总结
2015/07/24 职场文书
教你使用vscode 搭建react-native开发环境
2021/07/07 Javascript