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 相关文章推荐
Z-Blog中用到的js代码
Mar 15 Javascript
javascript倒计时功能实现代码
Jun 07 Javascript
Js,alert出现乱码问题的解决方法
Jun 19 Javascript
登陆成功后自动计算秒数执行跳转
Jan 23 Javascript
基于Bootstrap重置输入框内容按钮插件
May 12 Javascript
基于BootStrap的图片轮播效果展示实例代码
May 23 Javascript
jQuery基础_入门必看知识点
Jul 04 Javascript
jQuery中checkbox反复调用attr('checked', true/false)只有第一次生效的解决方法
Nov 16 Javascript
jQuery EasyUI 组件加上“清除”功能实例详解
Apr 11 jQuery
Node.js实现注册邮箱激活功能的方法示例
Mar 23 Javascript
解决vue 绑定对象内点击事件失效问题
Sep 05 Javascript
vue 使用 sortable 实现 el-table 拖拽排序功能
Dec 26 Vue.js
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
IIS7.X配置PHP运行环境小结
2011/06/09 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
laravel自定义分页的实现案例offset()和limit()
2019/10/15 PHP
JavaScript实现禁止后退的方法
2006/12/27 Javascript
利用JQuery为搜索栏增加tag提示
2009/06/22 Javascript
js列举css中所有图标的实现代码
2011/07/04 Javascript
javascript生成json数据简单示例分享
2014/02/14 Javascript
javascript实现回车键提交表单方法总结
2015/01/10 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
js实现点击图片改变页面背景图的方法
2015/02/28 Javascript
jQuery原型属性和原型方法详解
2015/07/07 Javascript
javascript+HTML5自定义元素播放焦点图动画
2016/02/21 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
2016/09/04 Javascript
react-native 圆弧拖动进度条实现的示例代码
2018/04/12 Javascript
JS实现吸顶特效
2020/01/08 Javascript
jQuery实现朋友圈查看图片
2020/09/11 jQuery
python 不关闭控制台的实现方法
2011/10/23 Python
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
pygame游戏之旅 创建游戏窗口界面
2018/11/20 Python
pandas把所有大于0的数设置为1的方法
2019/01/26 Python
简单了解python关系(比较)运算符
2019/07/08 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
2020/06/06 Python
Python爬虫简单运用爬取代理IP的实现
2020/12/01 Python
python中pow函数用法及功能说明
2020/12/04 Python
C++面试题:关于链表和指针
2013/06/05 面试题
Linux如何压缩可执行文件
2014/03/27 面试题
公司领导推荐信
2013/11/12 职场文书
体育教育专业毕业生自荐信
2013/11/15 职场文书
十岁生日家长答谢词
2014/01/17 职场文书
主要负责人任命书
2014/06/06 职场文书
优秀班主任申报材料
2014/12/16 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
天堂的孩子观后感
2015/06/11 职场文书
优秀学生干部主要事迹材料
2015/11/04 职场文书
《惊弓之鸟》教学反思
2016/02/20 职场文书
Windows下载并安装MySQL8.0.x 版本的完整教程
2022/04/10 MySQL