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 相关文章推荐
js实现按一下删除键删除整个单词附demo
Sep 05 Javascript
express的中间件basicAuth详解
Dec 04 Javascript
cocos2dx骨骼动画Armature源码剖析(一)
Sep 08 Javascript
JavaScript如何实现跨域请求
Aug 05 Javascript
BootStrap使用file-input插件上传图片的方法
Sep 05 Javascript
基于Vue2的移动端开发环境搭建详解
Nov 03 Javascript
javascript 面向对象实战思想分享
Sep 07 Javascript
详解vue-cli项目中的proxyTable跨域问题小结
Feb 09 Javascript
node.js实现为PDF添加水印的示例代码
Dec 05 Javascript
原生js实现3D轮播图
Mar 21 Javascript
使用vue-cli4.0快速搭建一个项目的方法步骤
Dec 04 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
Sep 07 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
一个SQL管理员的web接口
2006/10/09 PHP
如何用php获取文件名后缀
2013/06/09 PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
2014/11/07 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
2015/05/13 PHP
CI框架实现创建自定义类库的方法
2018/12/25 PHP
获取Javscript执行函数名称的方法
2006/12/22 Javascript
javascript+dom树型菜单类,希望朋友们一起进步
2007/05/03 Javascript
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
javascript getElementsByClassName 和js取地址栏参数
2010/01/02 Javascript
jQuery动态添加 input type=file的实现代码
2012/06/14 Javascript
js中的时间转换—毫秒转换成日期时间的示例代码
2014/01/26 Javascript
jQuery的live()方法对hover事件的处理示例
2014/02/27 Javascript
JS函数this的用法实例分析
2015/02/05 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
2015/02/18 Javascript
多个jQuery版本共存的处理方案
2015/03/17 Javascript
详解Matlab中 sort 函数用法
2016/03/20 Javascript
详解jQuery UI库中文本输入自动补全功能的用法
2016/04/23 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
JavaScript中数组常见操作技巧
2017/09/01 Javascript
vue的.vue文件是怎么run起来的(vue-loader)
2018/12/10 Javascript
[01:00:44]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第三局
2016/03/04 DOTA
selenium+python自动化测试之环境搭建
2019/01/23 Python
12个步骤教你理解Python装饰器
2019/07/01 Python
实现Python与STM32通信方式
2019/12/18 Python
django template实现定义临时变量,自定义赋值、自增实例
2020/07/12 Python
python输入中文的实例方法
2020/09/14 Python
HTML5 Canvas像素处理使用接口介绍
2012/12/02 HTML / CSS
浅谈Html5多线程开发之WebWorkers
2018/05/02 HTML / CSS
德国汉莎航空中国官网: Lufthansa中国
2017/03/30 全球购物
初一生物教学反思
2014/01/18 职场文书
医药销售求职信范文
2014/02/01 职场文书
运动会入场词50字
2014/02/20 职场文书
佛光寺导游词
2015/02/10 职场文书
2015年社区科普工作总结
2015/05/13 职场文书
Rust 连接 PostgreSQL 数据库的详细过程
2022/01/22 PostgreSQL
MySql重置root密码 --skip-grant-tables
2022/04/11 MySQL