angularjs中控制视图的控制器的两种注入依赖项及服务的写法
在AngularJS中,控制器是用于控制视图行为的重要组件。当定义控制器时,有两种主要的方式注入依赖项:
1. 显式依赖注入,聚聚使用字符串数组形式来注入依赖项:
myapp.controller('myCtrl', ['$scope', function($scope) {
$scope.navs = [];
}]);
在这种方式中,依赖项(这里是`$scope`)是以字符串的形式明确列出的。这种方法被称为“显式依赖注入”,它使得依赖关系更加明显,并且有助于测试,因为可以更容易地为依赖项提供mock对象。这是AngularJS官方推荐的做法,因为它能够避免由于作用域链导致的问题,并且有助于提高代码的可维护性。这种写法中function($scope)的参数名$scope可以在函数内部更改而不影响代码的执行,因为AngularJS会根据字符串数组中的名字来查找对应的依赖项。例如,您可以将函数参数改为任何其他名称,如下所示:
myapp.controller('myCtrl', ['$scope', function(myCustomScopeName) {
myCustomScopeName.navs = [];
}]);
只要第一个数组元素'$scope'保持不变,AngularJS就能正确地将$scope实例注入到名为myCustomScopeName的参数中。
2. 隐匿依赖注入,即直接传递依赖项名称的形式:
myapp.controller('myCtrl', function($scope) {
$scope.navs = [];
});
这种方式中,依赖项(如`$scope`)直接作为参数传递给构造函数。虽然这种方式简洁,但它依赖于解析器能够正确解析出函数参数名并将其与服务名称匹配。这在开发阶段可能会导致一些问题,尤其是在某些JavaScript优化工具(如闭包编译器)压缩代码时,可能会改变变量名,从而导致注入失败。这种写法中,function($scope)的$scope这个函数参数就不能更改名称了。否则AngularJS将无法识别并注入正确的服务,从而导致错误。
总的来说,第一种方法(显式依赖注入)更安全,更易于调试和测试,而第二种方法虽然简单,但在大型项目中可能会带来一些问题。因此,建议使用第一种方法来定义你的控制器。
angularjs中控制视图的控制器的两种注入依赖项及服务的写法的更多相关文章
- Eclipse中SVN的安装步骤(两种)和使用方法
Eclipse中SVN的安装步骤(两种)和使用方法 一.给Eclipse安装SVN,最常见的有两种方式:手动方式和使用安装向导方式.具体步骤如下: 方式一:手动安装 1.下载最新的Eclipse,我的 ...
- Java 获取*.properties配置文件中的内容 ,常见的两种方法
import java.io.InputStream; import java.util.Enumeration; import java.util.List; import java.util.Pr ...
- 在Java Web程序中使用监听器可以通过以下两种方法
之前学习了很多涉及servlet的内容,本小结我们说一下监听器,说起监听器,编过桌面程序和手机App的都不陌生,常见的套路都是拖一个控件,然后给它绑定一个监听器,即可以对该对象的事件进行监听以便发生响 ...
- [转]MFC子线程中更新控件内容的两种办法
一.概述 每个系统中都有线程(至少都有一个主线程),而线程最重要的作用就是并行处理,提高软件的并发率.针对界面来说,还能提高界面的响应能力.一般的,为了应用的稳定性,在数据处理等耗时操作会单独在一个线 ...
- python中字典的循环遍历的两种方式
开发中经常会用到对于字典.列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式. 注意: python2和python ...
- js如何实现动态的在表格中添加和删除行?(两种方法)
js如何实现动态的在表格中添加和删除行?(两种方法) 一.总结 1.table元素有属性和一些方法(js使用) 方法一:添加可通过在table的innerHTML属性中添加tr和td来实现 tab.i ...
- QT中获取选中的radioButton的两种方法(动态取得控件的objectName之后,对名字进行比较)
QT中获取选中的radioButton的两种方法 QT中要获取radioButton组中被选中的那个按钮,可以采用两种如下两种办法进行: 方法一:采用对象名称进行获取 代码: 1 QRadioBu ...
- Android中H5和Native交互的两种方式
Android中H5和Native交互的两种方式:http://www.jianshu.com/p/bcb5d8582d92 注意事项: 1.android给h5页面注入一个对象(WZApp),这个对 ...
- C语言中存储多个字符串的两种方式
C语言中存储多个字符串的两种方式 方式一 二维字符串数组 声明: char name[][] = { "Justinian", "Momo", " ...
- 在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入
在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式 ...
随机推荐
- JMeter 基于脚本实现代码共享
需求描述 需求是这样的:执行某次压测任务时,压测涉及的前端接口,要求携带一个userName请求头,该请求头值为实际用户名经过DES加密后,再采用Base64加密后的值,为此,编写了一段加密代码,发送 ...
- 使用 useRequestURL 组合函数访问请求URL
title: 使用 useRequestURL 组合函数访问请求URL date: 2024/7/26 updated: 2024/7/26 author: cmdragon excerpt: 摘要: ...
- 【Vue】HutoolExcel导出
最近写Excel导出功能,发现需求有点复杂,这里整理一下思路和解决方案 一.需求背景: 老系统改造,功能和代码是现成的,预览了一下内容: 第一个是有特定样式,比如首行标题,以及红色的列名称 第二个,导 ...
- 英特尔Movidius神经计算棒的介绍
手上有一款英特尔Movidius神经计算棒,本打算疫情结束返回学校,突然得到非官方的通知告诉我只能等到9月份返校了,于是就想起这个被闲置的计算棒了,手上的是1代的计算棒,不过1代的和二代的使用起来方法 ...
- maven实战教程-含视频讲解
1.背景 2.什么是maven? 通俗的说就是,不用手动拷贝jar包,帮我们管理项目结构,只需要配置坐标,自动从中央仓库下载(其他介绍请百度...). 3.Maven的安装与配置 注意:Maven在使 ...
- [CEOI2011] Matching 题解
前言 题目链接:洛谷. 在上一题之后,模拟赛又放了一道 KMP 重定义相等的问题,但是寄了,故再记之. 题意简述 现在给出 \(1 \sim n\) 的排列 \(p\) 和序列 \(h_1, h_2, ...
- jxls导入excel
我们在开发中经常用jxls实现导出功能,殊不知jxls也有导入功能,下面来介绍下如何使用jxls导入excel. 首先在maven的pom中添加相关依赖,如下: <dependency> ...
- Win32 自绘控件按钮类
今天学了控件的自绘,初步偿试了下,蹂躏的不行不行的,查了好多的资料,头都弄大了, 有好多还是没弄明白,只是初步实现一个按钮的基本功能,好难呀, 先看下效果: 按下状态 弹起状态 按钮2按下状态 按钮2 ...
- Java——N以内累加求和
2024/07/15 1.题目 2.错误 3.分析 4.答案 1.题目 2.错误 import java.util.Scanner; public class Main { public static ...
- 从网友探秘 《黑神话:悟空》 的脚本说说C#
<黑神话:悟空>千呼万唤始出来.在正式发售后不到24小时,Steam在线玩家峰值突破222万,在Steam所有游戏在线玩家历史峰值中排名第二.第一拨玩家纷纷晒出好评,称这款现象级产品正式开 ...