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 tools之tabs 选项卡/页签
Jul 25 Javascript
javascript &amp;&amp;和||运算法的另类使用技巧
Nov 28 Javascript
jQuery Validation插件remote验证方式的Bug解决
Jul 01 Javascript
js脚本分页代码分享(7种样式)
Aug 19 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
Aug 31 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
Sep 09 Javascript
bootstrap IE8 兼容性处理
Mar 22 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
Aug 28 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
Jun 25 Javascript
Vue Extends 扩展选项用法完整实例
Sep 17 Javascript
vue中keep-alive内置组件缓存的实例代码
Apr 16 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
Aug 18 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图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
2010/12/02 PHP
PHP的explode和implode的使用说明
2011/07/17 PHP
php字符串操作常见问题小结
2016/10/11 PHP
PHP实现对数字分隔加千分号的方法
2019/03/18 PHP
23个超流行的jQuery相册插件整理分享
2011/04/25 Javascript
对jQuery的事件绑定的一些思考(补充)
2013/04/20 Javascript
判定是否原生方法的JS代码
2013/11/12 Javascript
js的Prototype属性解释及常用方法
2014/05/08 Javascript
javascript字母大小写转换的4个函数详解
2014/05/09 Javascript
JQuery实现图片轮播效果
2015/09/15 Javascript
JavaScript:Date类型全面解析
2016/05/19 Javascript
jQuery实现获取元素索引值index的方法
2016/09/18 Javascript
Node.js调试技术总结分享
2017/03/12 Javascript
基于Vue.js 2.0实现百度搜索框效果
2020/12/28 Javascript
Vue组件之Tooltip的示例代码
2017/10/18 Javascript
vue如何根据网站路由判断页面主题色详解
2018/11/02 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
js 图片懒加载的实现
2020/10/21 Javascript
用python + openpyxl处理excel2007文档思路以及心得
2014/07/14 Python
Python中的choice()方法使用详解
2015/05/15 Python
python列表操作之extend和append的区别实例分析
2015/07/28 Python
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
python 调用c语言函数的方法
2017/09/29 Python
python出现&quot;IndentationError: unexpected indent&quot;错误解决办法
2017/10/15 Python
numpy concatenate数组拼接方法示例介绍
2019/05/27 Python
python Django编写接口并用Jmeter测试的方法
2019/07/31 Python
Python RabbitMQ实现简单的进程间通信示例
2020/07/02 Python
美国第二大连锁书店:Books-A-Million
2017/12/28 全球购物
西班牙拥有最佳品牌的动物商店:Animalear.com
2018/01/05 全球购物
database面试题
2013/03/28 面试题
写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分隔
2015/07/30 面试题
写给老婆的检讨书
2014/02/21 职场文书
保护环境演讲稿
2014/05/10 职场文书
幼儿老师求职信
2014/06/30 职场文书
先进党员事迹材料
2014/12/24 职场文书
MySQL令人大跌眼镜的隐式转换
2021/08/23 MySQL