当前位置: 首页 > 面试题库 >

我不明白在控制器中使用$ inject

魏兴邦
2023-03-14
问题内容

我对Angular中的注入感到非常困惑。我不知道在哪里使用它以及为什么。是否仅按此处所述与工厂一起使用?

myController.$inject = ['$scope','notify'];

notify是工厂的名称。


问题答案:

这是在代码最小化后(如果选择最小化)支持依赖注入的一种方法。

声明控制器时,该函数采用参数:

function ($scope, notify)

压缩代码时,您的函数将如下所示:

function (a, b)

由于AngularJS使用函数参数名称来推断DI,因此您的代码会中断,因为AngularJS不了解ab

为了解决此问题,他们提供了其他方法来声明控制器(或其他服务/工厂/等):

  1. 对于控制器,请使用$inject方法-在此处传递一个映射到控制器函数参数的文字数组。所以,如果您提供
    ['$scope', 'notify']
    

那么函数的第一个参数的值将是与此控制器关联的作用域对象,第二个参数将是通知服务。

  1. 在声明新的控制器,服务等时,可以使用数组文字语法。在这里,您可以执行以下操作:
    angular.module('myModule').controller('MyController', ['$scope', 'notify', function ($scope, notify) {
    ...
    

    }]);

数组作为控制器功能的参数,会将DI对象映射到您的功能参数。

我更喜欢在声明控制器等时使用选项#2,因为它位于同一位置,因此更易于阅读/理解/交叉检查。



 类似资料:
  • 问题内容: 我已经在AngularJS教程中看到,有人像这样声明其控制器功能: 其他人这样做是这样的: 哪种方法是在JS文件中声明控制器的最佳方法,因此与最新版本的AngularJS(现在为1.0.7)一起使用效果最佳,这是最佳做法?还是真的不重要吗? 问题答案: 您应该遵循他们提供的第二个示例,该示例使用字符串标识控制器,而不是潜在的全局函数。使用Array语法,以便您可以最小化代码而不必担心m

  • 我需要改变复选框检查状态,但useCallback重新呈现组件很多次。我不明白它是如何工作的。我读过很多关于它的材料。 重新渲染的数量:

  • 我正在Celero git存储库中检查DoNotOptimizeAway的含义。但我还是不明白。请你用外行的话帮我理解一下好吗。尽你所能。

  • 问题内容: 我已经花了最后两天的时间来理解系统调用,但是我仍然在这里。让我直接谈谈这个问题。 在execlp的声明系统调用为与描述: 该为const char ARG和随后的椭圆在execl的(),execlp()和execle()函数可以作为为arg0,ARG1,…,ARGN被认为。 但是,我在课本中看到这样的系统调用:(“ …”是我们作为学生来识别的)。但是,此系统调用甚至与系统调用上的声明都

  • 在我的Visual Studio项目中,我有以下几点,而且效果很好: 我只是想明白,编译器是否坚持我用“typename”作为d::result_of的前缀,因为它可能是模糊的,在d::result_of可以返回一个类,然后::类型可以是一个那个班的成员?这就是为什么它坚持要添加typename吗?如果是这样,那么为什么Visual Studio允许它?不合规吗? 另外,因为我已经读到了C 14或

  • 问题内容: 我想使用Redis功能,例如MVC控制器中的位字段和哈希字段。我知道ASP.NET核心中内置了缓存支持,但这仅支持基本的GET和SET命令,而不支持我的应用程序中所需的命令。我知道如何从普通(例如控制台)应用程序中使用StackExchange.Redis,但是我不确定如何在ASP站点中进行设置。 我应该将所有连接初始化代码放在哪里,以便以后可以从控制器访问它?这是我将使用依赖项注入的