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 相关文章推荐
setAttribute 与 class冲突解决
Feb 17 Javascript
Mootools 1.2教程 输入过滤第一部分(数字)
Sep 15 Javascript
JQuery.uploadify 上传文件插件的使用详解 for ASP.NET
Jan 22 Javascript
JavaScript Event学习第五章 高级事件注册模型
Feb 07 Javascript
jQuery中add实现同时选择两个id对象
Oct 22 Javascript
jquery移动listbox的值原理及代码
May 03 Javascript
jQuery实现当按下回车键时绑定点击事件
Jan 28 Javascript
jquery实现邮箱自动填充提示功能
Nov 17 Javascript
详解vue.js2.0父组件点击触发子组件方法
May 10 Javascript
vue项目中添加单元测试的方法
Jul 21 Javascript
Node.js中console.log()输出彩色字体的方法示例
Dec 01 Javascript
Jquery高级应用Deferred对象原理及使用实例
May 28 jQuery
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/11/12 PHP
php 数组动态添加实现代码(最土团购系统的价格排序)
2011/12/30 PHP
javascript下有关dom以及xml节点访问兼容问题
2007/11/26 Javascript
extjs 学习笔记 四 带分页的grid
2009/10/20 Javascript
从盛大通行证上摘下来的身份证验证js代码
2011/01/11 Javascript
解决js正则匹配换行问题实现代码
2012/12/10 Javascript
JS JSON对象转为字符串的简单实现方法
2013/11/18 Javascript
基于javascript滚动图片具体实现
2013/11/18 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
jQuery获得包含margin的outerWidth和outerHeight的方法
2015/03/25 Javascript
深入理解JavaScript中的对象
2015/06/04 Javascript
javascript使用输出语句实现网页特效代码
2015/08/06 Javascript
js实现继承的5种方式
2015/12/01 Javascript
喜大普奔!jQuery发布 3.0 最终版
2016/06/12 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
浅谈js中的变量名和函数名重名
2017/02/13 Javascript
深入理解Vue.js源码之事件机制
2017/09/27 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
2018/03/09 Javascript
js如何实现元素曝光上报
2019/08/07 Javascript
python扫描proxy并获取可用代理ip的实例
2017/08/07 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
2019/04/29 Python
Python学习笔记之For循环用法详解
2019/08/14 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
2020/05/15 Python
CSS3媒体查询Media Queries基础学习教程
2016/02/29 HTML / CSS
Manuka Doctor美国官网:麦卢卡蜂蜜和蜂毒护肤
2016/12/25 全球购物
澳大利亚电子产品购物网站:Dick Smith
2017/02/02 全球购物
班级聚会策划书
2014/01/16 职场文书
作文评语集锦大全
2014/04/23 职场文书
学习十八大的心得体会
2014/09/01 职场文书
租房协议书
2014/09/12 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
运动会通讯稿600字
2015/07/20 职场文书
运动会闭幕式致辞
2015/07/29 职场文书
高三物理教学反思
2016/02/20 职场文书
面试官问我Mysql的存储引擎了解多少
2022/08/05 MySQL