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 日期分离成年月日的代码
May 14 Javascript
web前端开发也需要日志
Dec 09 Javascript
innerHTML与jquery里的html()区别介绍
Oct 12 Javascript
JavaScript创建对象的写法
Aug 29 Javascript
JavaScript插件化开发教程 (三)
Jan 27 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
Jun 23 Javascript
JQuery点击行tr实现checkBox选中的简单实例
May 26 Javascript
js前端导出Excel的方法
Nov 01 Javascript
js的继承方法小结(prototype、call、apply)(推荐)
Apr 17 Javascript
超轻量级的js时间库miment使用解析
Aug 02 Javascript
javascript实现摄像头拍照预览
Sep 30 Javascript
layui 弹出层值回传解决方式
Nov 14 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获取某个目录大小的代码
2008/09/10 PHP
php获取qq用户昵称和在线状态(实例分析)
2013/10/27 PHP
Yii快速入门经典教程
2015/12/28 PHP
php封装的图片(缩略图)处理类完整实例
2016/10/19 PHP
Zend Framework数据库操作方法实例总结
2016/12/11 PHP
jQuery语法总结和注意事项小结
2012/11/11 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
给ListBox添加双击事件示例代码
2013/12/02 Javascript
js实现用户注册协议倒计时的方法
2015/01/21 Javascript
JS实现超简单的仿QQ折叠菜单效果
2015/09/21 Javascript
用canvas 实现个图片三角化(LOW POLY)效果
2016/02/18 Javascript
js弹出框、对话框、提示框、弹窗实现方法总结(推荐)
2016/05/31 Javascript
通过BootStrap实现轮播图的实际应用
2016/09/26 Javascript
纯JS打造网页中checkbox和radio的美化效果
2016/10/13 Javascript
JavaScript数据结构之二叉树的遍历算法示例
2017/04/13 Javascript
node 命令方式启动修改端口的方法
2018/05/12 Javascript
jquery实现联想词搜索框和搜索结果分页的示例
2018/10/10 jQuery
使用koa2创建web项目的方法步骤
2019/03/12 Javascript
axios实现文件上传并获取进度
2020/03/25 Javascript
解决vue-router 嵌套路由没反应的问题
2020/09/22 Javascript
jquery插件实现轮播图效果
2020/10/19 jQuery
[01:32]TI奖金增速竟因它再创新高!DOTA2勇士令状不朽珍藏Ⅰ饰品欣赏
2018/05/18 DOTA
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
python3获取两个日期之间所有日期,以及比较大小的实例
2018/04/08 Python
详解将Django部署到Centos7全攻略
2018/09/26 Python
如何在VSCode上轻松舒适的配置Python的方法步骤
2019/10/28 Python
电气工程和自动化自荐信范文
2013/12/25 职场文书
市场开发与营销专业求职信
2013/12/31 职场文书
在校硕士自我鉴定
2014/01/23 职场文书
七年级地理教学反思
2014/01/26 职场文书
关于雷锋的演讲稿
2014/05/10 职场文书
安全责任书模板
2014/07/22 职场文书
大学生毕业评语
2014/12/31 职场文书
承诺书范本
2015/01/21 职场文书
2015年大学生村官工作总结
2015/04/21 职场文书
2016年大学生暑期社会实践活动总结
2016/04/06 职场文书