AngularJS实战之依赖注入与应用实践

简介: AngularJS实战之依赖注入与应用实践

AngularJS实战之依赖注入与应用实践
21/100
发布文章
weixin_57198749
未选择文件
new

什么是依赖注入

在这里插入图片描述

依赖注入(DI)是一种软件设计模式。在此模式中,一个或多个依赖项(或服务)被注入(或通过引用传递)到独立对象(或客户端),然后成为客户端状态的一部分。
这种模式分离了客户端依赖行为本身的创建,这使得程序设计松散耦合,并遵循依赖反转和单一责任的原则。与服务定位器模式直接相反,它允许客户机理解客户机如何使用系统查找依赖项。

Angularjs提供了良好的依赖注入机制。以下五个核心组件用作依赖项注入:

  • List item
  • value
  • factory
  • service
  • provider
  • constant

定义一个模块

var mainApp = angular.module("mainApp", []);

创建 value 对象 "defaultInput" 并传递数据

mainApp.value("defaultInput", 5);

将 "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);
   }
});

factory

factory是一个返回值的函数。它是在服务和控制器需要时创建的。
通常我们使用factory函数来计算或返回值。
创建 factory "MathService" 用于两数的乘积 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;
}); 

在 service 中注入 factory "MathService"

mainApp.service('CalcService', function(MathService){
   this.square = function(a) {
      return MathService.multiply(a,a);
   }
});

在angularjs中,通过提供者(配置阶段)创建服务、工厂等。
提供程序提供了一个工厂方法get(),用于返回value/service/factory。

mainApp.config(function($provide) {
   $provide.provider('MathService', function() {
      this.$get = function() {
         var factory = {};  
         
         factory.multiply = function(a, b) {
            return a * b; 
         }
         return factory;
      };
   });
});

使用 provider 创建 service 定义一个方法用于计算两数乘积
常量(Constant)用于在配置阶段传递值。请注意,此常量在配置阶段不可用。

html 元素是 AngularJS 应用: ng-app="myNoteApp" 的容器:

<html ng-app="myNoteApp">

<div> 是 HTML 页面中控制器: ng-controller="myNoteCtrl" 的作用域:

<div ng-controller="myNoteCtrl">

ng-model 指令绑定了 到控制器变量 message:

<textarea ng-model="message" cols="40" rows="10"></textarea>

两个 ng-click 事件调用了控制器函数 clear() 和 save():

<button ng-click="save()">Save</button>
<button ng-click="clear()">Clear</button>

ng-bind 指令绑定控制器函数 left() 到 ,用于显示剩余字符:

Number of characters left: <span ng-bind="left()"></span>

mainApp.constant("configParam", "constant value");

在这里插入图片描述
Angularjs应用程序架构
上面的示例是一个完整的angularjs单页web应用程序(SPA)。
<html>元素包含一个angularjs应用程序(ng app=)。
元素定义了angularjs控制器(ng controller=)的范围。
一个应用程序中可以有多个控制器。
应用程序文件(my…App.JS)定义了应用程序模型代码。
一个或多个控制器文件(my…Ctrl.JS)定义了控制器代码。

<script src="myNoteApp.js"></script>
<script src="myNoteCtrl.js"></script>

应用程序库文件只能在加载angularjs后执行:

<p>
<button ng-click="save()">保存</button>
<button ng-click="clear()">清除</button>
</p>
<script src="myNoteApp.js"></script>
<script src="myNoteCtrl.js"></script>

在这里插入图片描述

什么是依赖注入
在这里插入图片描述

依赖注入(DI)是一种软件设计模式。在此模式中,一个或多个依赖项(或服务)被注入(或通过引用传递)到独立对象(或客户端),然后成为客户端状态的一部分。
这种模式分离了客户端依赖行为本身的创建,这使得程序设计松散耦合,并遵循依赖反转和单一责任的原则。与服务定位器模式直接相反,它允许客户机理解客户机如何使用系统查找依赖项。

Angularjs提供了良好的依赖注入机制。以下五个核心组件用作依赖项注入:

List item
value
factory
service
provider
constant
定义一个模块

var mainApp = angular.module("mainApp", []);
创建 value 对象 “defaultInput” 并传递数据

mainApp.value("defaultInput", 5);
将 “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);

}
});
factory
factory是一个返回值的函数。它是在服务和控制器需要时创建的。
通常我们使用factory函数来计算或返回值。
创建 factory “MathService” 用于两数的乘积 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;
});
在 service 中注入 factory “MathService”

mainApp.service('CalcService', function(MathService){
this.square = function(a) {

  return MathService.multiply(a,a);

}
});
在angularjs中,通过提供者(配置阶段)创建服务、工厂等。
提供程序提供了一个工厂方法get(),用于返回value/service/factory。

mainApp.config(function($provide) {
$provide.provider('MathService', function() {

  this.$get = function() {
     var factory = {};  
     
     factory.multiply = function(a, b) {
        return a * b; 
     }
     return factory;
  };

});
});
使用 provider 创建 service 定义一个方法用于计算两数乘积
常量(Constant)用于在配置阶段传递值。请注意,此常量在配置阶段不可用。

html 元素是 AngularJS 应用: ng-app=“myNoteApp” 的容器:

是 HTML 页面中控制器: ng-controller=“myNoteCtrl” 的作用域:
ng-model 指令绑定了 到控制器变量 message: 两个 ng-click 事件调用了控制器函数 clear() 和 save(): ng-bind 指令绑定控制器函数 left() 到 ,用于显示剩余字符: Number of characters left: mainApp.constant("configParam", "constant value"); 在这里插入图片描述 Angularjs应用程序架构 上面的示例是一个完整的angularjs单页web应用程序(SPA)。 元素包含一个angularjs应用程序(ng app=)。 元素定义了angularjs控制器(ng controller=)的范围。 一个应用程序中可以有多个控制器。 应用程序文件(my…App.JS)定义了应用程序模型代码。 一个或多个控制器文件(my…Ctrl.JS)定义了控制器代码。 应用程序库文件只能在加载angularjs后执行:

在这里插入图片描述 Markdown 已选中 2594 字数 139 行数 当前行 139, 当前列 0HTML 2251 字数 82 段落
相关文章
|
弹性计算 网络协议 Linux
IPv6访问不通的排查方法
IPv6访问不通的排查方法
IPv6访问不通的排查方法
|
测试技术 开发工具 iOS开发
iOS自动化测试方案(三):WDA+iOS自动化测试解决方案
这篇文章是iOS自动化测试方案的第三部分,介绍了在没有MacOS系统条件下,如何使用WDA(WebDriverAgent)结合Python客户端库facebook-wda和tidevice工具,在Windows系统上实现iOS应用的自动化测试,包括环境准备、问题解决和扩展应用的详细步骤。
2133 1
iOS自动化测试方案(三):WDA+iOS自动化测试解决方案
|
Linux KVM 虚拟化
【阿里云镜像】使用阿里云oVirt镜像部署oVirt平台
【阿里云镜像】使用阿里云oVirt镜像部署oVirt平台
566 0
【阿里云镜像】使用阿里云oVirt镜像部署oVirt平台
|
3天前
|
弹性计算 运维 搜索推荐
三翼鸟携手阿里云ECS g9i:智慧家庭场景的效能革命与未来生活新范式
三翼鸟是海尔智家旗下全球首个智慧家庭场景品牌,致力于提供覆盖衣、食、住、娱的一站式全场景解决方案。截至2025年,服务近1亿家庭,连接设备超5000万台。面对高并发、低延迟与稳定性挑战,全面升级为阿里云ECS g9i实例,实现连接能力提升40%、故障率下降90%、响应速度提升至120ms以内,成本降低20%,推动智慧家庭体验全面跃迁。
|
4天前
|
数据采集 人工智能 自然语言处理
3分钟采集134篇AI文章!深度解析如何通过云无影AgentBay实现25倍并发 + LlamaIndex智能推荐
结合阿里云无影 AgentBay 云端并发采集与 LlamaIndex 智能分析,3分钟高效抓取134篇 AI Agent 文章,实现 AI 推荐、智能问答与知识沉淀,打造从数据获取到价值提炼的完整闭环。
365 91
|
4天前
|
SQL 人工智能 自然语言处理
Geo优化SOP标准化:于磊老师的“人性化Geo”体系如何助力企业获客提效46%
随着生成式AI的普及,Geo优化(Generative Engine Optimization)已成为企业获客的新战场。然而,缺乏标准化流程(Geo优化sop)导致优化效果参差不齐。本文将深入探讨Geo专家于磊老师提出的“人性化Geo”优化体系,并展示Geo优化sop标准化如何帮助企业实现获客效率提升46%的惊人效果,为企业在AI时代构建稳定的流量护城河。
379 156
Geo优化SOP标准化:于磊老师的“人性化Geo”体系如何助力企业获客提效46%
|
5天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~