在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中控制视图的控制器的两种注入依赖项及服务的写法的更多相关文章

  1. Eclipse中SVN的安装步骤(两种)和使用方法

    Eclipse中SVN的安装步骤(两种)和使用方法 一.给Eclipse安装SVN,最常见的有两种方式:手动方式和使用安装向导方式.具体步骤如下: 方式一:手动安装 1.下载最新的Eclipse,我的 ...

  2. Java 获取*.properties配置文件中的内容 ,常见的两种方法

    import java.io.InputStream; import java.util.Enumeration; import java.util.List; import java.util.Pr ...

  3. 在Java Web程序中使用监听器可以通过以下两种方法

    之前学习了很多涉及servlet的内容,本小结我们说一下监听器,说起监听器,编过桌面程序和手机App的都不陌生,常见的套路都是拖一个控件,然后给它绑定一个监听器,即可以对该对象的事件进行监听以便发生响 ...

  4. [转]MFC子线程中更新控件内容的两种办法

    一.概述 每个系统中都有线程(至少都有一个主线程),而线程最重要的作用就是并行处理,提高软件的并发率.针对界面来说,还能提高界面的响应能力.一般的,为了应用的稳定性,在数据处理等耗时操作会单独在一个线 ...

  5. python中字典的循环遍历的两种方式

    开发中经常会用到对于字典.列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式. 注意: python2和python ...

  6. js如何实现动态的在表格中添加和删除行?(两种方法)

    js如何实现动态的在表格中添加和删除行?(两种方法) 一.总结 1.table元素有属性和一些方法(js使用) 方法一:添加可通过在table的innerHTML属性中添加tr和td来实现 tab.i ...

  7. QT中获取选中的radioButton的两种方法(动态取得控件的objectName之后,对名字进行比较)

    QT中获取选中的radioButton的两种方法   QT中要获取radioButton组中被选中的那个按钮,可以采用两种如下两种办法进行: 方法一:采用对象名称进行获取 代码: 1 QRadioBu ...

  8. Android中H5和Native交互的两种方式

    Android中H5和Native交互的两种方式:http://www.jianshu.com/p/bcb5d8582d92 注意事项: 1.android给h5页面注入一个对象(WZApp),这个对 ...

  9. C语言中存储多个字符串的两种方式

    C语言中存储多个字符串的两种方式 方式一    二维字符串数组 声明: char name[][] = { "Justinian", "Momo", " ...

  10. 在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入

    在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式 ...

随机推荐

  1. 深入理解Spring Boot:Bean管理、原理解析与Maven高级应用

    深入理解Spring Boot:Bean管理.原理解析与Maven高级应用 前言 大家好,今天我们来聊聊Spring Boot的核心内容,包括Bean管理.Spring Boot的工作原理以及Mave ...

  2. 【VMware VCF】VMware Cloud Foundation Part 04:准备 ESXi 主机。

    VMware Cloud Foundation 管理域部署要求至少准备 4 台 ESXi 主机作为最小计算单元,如果采用整合部署(管理域和 VI 工作负载域合并),还需要根据实际情况适量增加 ESXi ...

  3. Jmeter函数助手37-setProperty

    setProperty函数用于修改jmeter属性值. 属性名称:填入需要修改的属性名 Value of property:填入需要修改的属性值 Return Original Value of pr ...

  4. 2、SpringMVC之入门案例

    2.1.环境搭建 2.1.1.右击project创建新module 2.1.2.选择maven 2.1.3.设置module名称和路径 2.1.4.module初始状态 2.1.5.配置打包方式 注意 ...

  5. 【Tutorial C】01 概述

    历史 History 欢迎来到C语言的世界!C语言是一种强大的专业化编程语言,深受业余和专业编程人员的欢迎. 在学习之前先让我们了解和认识它! C语言的原型是A语言(ALGOL 60语言). 1963 ...

  6. 人形机器人专用操作系统 —— KaihongOS还是ROS

    机器人不是一个新词汇,机器人在人们生产生活中已经出现了几十年了,而最近最火的词汇是"智能机器人"或者是"人形机器人(humanoid)",而这二者之间的区别就是 ...

  7. 华为高性能计算(HPC)文档——技术支持>智能计算解决方案>高性能计算>HPC

    链接地址: https://support.huawei.com/enterprise/zh/server-solutions/hpc-pid-253585671 ================== ...

  8. 这学校真是“nice”——人还未走,网就先停了

    人还没走,手续还没办,网就给我停了,这就要清人了,这学校太"nice"了!!!

  9. 再探 游戏 《 2048 》 —— AI方法—— 缘起、缘灭(1) —— Firefox浏览器下自动运行游戏篇

    四年前曾经写过一过博客: 对 游戏 < 2048 > 的一些思考 虽然过去几年了,但是这个游戏一直没有搞懂该怎么使用AI算法来进行求解,这里再次对这个问题进行一些探索. ========= ...

  10. 读论文《IMPALA: Scalable Distributed Deep-RL with Importance Weighted Actor-Learner Architectures》——(续)实验部分

    论文地址: https://arxiv.org/pdf/1802.01561v2.pdf 论文<IMPALA: Scalable Distributed Deep-RL with Importa ...