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中after的两种用法实例
Jul 03 Javascript
jquery 选取方法都有哪些
May 18 Javascript
对 jQuery 中 data 方法的误解分析
Jun 18 Javascript
javascript编写贪吃蛇游戏
Jul 07 Javascript
Javascript模仿淘宝信用评价实例(附源码)
Nov 26 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
Dec 28 Javascript
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
Apr 21 Javascript
react中使用swiper的具体方法
May 15 Javascript
微信小程序仿美团城市选择
Jun 06 Javascript
Angular angular-file-upload文件上传的示例代码
Aug 23 Javascript
Vue 中可以定义组件模版的几种方式
Aug 06 Javascript
基于JavaScript实现表格隔行换色
May 08 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入门
2006/10/09 PHP
介绍一些PHP判断变量的函数
2012/04/24 PHP
Laravel5.1自定义500错误页面示例
2016/10/09 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
2016/11/09 PHP
JS 无法通过W3C验证的处理方法
2010/03/09 Javascript
Javascript 实用小技巧
2010/04/07 Javascript
将nodejs打包工具整合到鼠标右键的方法
2013/05/11 NodeJs
分享自己用JS做的扫雷小游戏
2016/02/17 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
手机端图片缩放旋转全屏查看PhotoSwipe.js插件实现
2016/08/25 Javascript
JavaScript中浅讲ajax图文详解
2016/11/11 Javascript
Vue中的数据监听和数据交互案例解析
2017/07/12 Javascript
Web开发使用Angular实现用户密码强度判别的方法
2017/09/27 Javascript
webpack dll打包重复问题优化的解决
2018/10/10 Javascript
微信小程序地图导航功能实现完整源代码附效果图(推荐)
2019/04/28 Javascript
JS实现网站楼层导航效果代码实例
2020/06/16 Javascript
webpack+vue-cil 中proxyTable配置接口地址代理操作
2020/07/18 Javascript
vue2和vue3的v-if与v-for优先级对比学习
2020/10/10 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
Python运算符重载用法实例分析
2015/06/01 Python
Python数据处理numpy.median的实例讲解
2018/04/02 Python
Python判断两个list是否是父子集关系的实例
2018/05/04 Python
Python 中Django安装和使用教程详解
2019/07/03 Python
python获取Linux发行版名称
2019/08/30 Python
关于Tensorflow 模型持久化详解
2020/02/12 Python
python 写一个水果忍者游戏
2021/01/13 Python
两种CSS3伪类选择器详细介绍
2013/12/24 HTML / CSS
梅西酒窖:Macy’s Wine Cellar
2018/01/07 全球购物
旧时光糖果:Old Time Candy
2018/02/05 全球购物
英国乡村时尚和宠物用品专家:Pet & Country
2018/07/02 全球购物
食品厂厂长岗位职责
2014/01/30 职场文书
环境整治工作方案
2014/05/18 职场文书
数据保密承诺书
2014/06/03 职场文书
员工保密协议范本,您一定得收藏!很有用!
2019/08/08 职场文书
python基于opencv批量生成验证码的示例
2021/04/28 Python
JavaScript流程控制(分支)
2021/12/06 Javascript