Javascript AngularJS:这个指令在做什么?
我对AngularJS有一些经验,并且在web上遇到过这个指令,但它与我以前见过的任何东西都不一样,我无法理解它在做什么?有人能帮忙吗 具体问题:在不太了解的情况下,指令的签名必须进行依赖项注入。但我正在努力解决的问题是:如果数组中传递了$injector,为什么它也作为函数中的参数发送,即函数($injector);换言之,为什么有两个美元注入器?如果我不将$injector发送到阵列中,什么将不起作用 另外,该指令是如何嵌入控制器的?何时定义此类控制器 此外,我通常会在下面的代码中看到带有$前缀的作用域,没有$它是如何工作的 任何链接阅读更多或解释它在这里将是有用的Javascript AngularJS:这个指令在做什么?,javascript,angularjs,angularjs-directive,angularjs-scope,angularjs-service,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,Angularjs Service,我对AngularJS有一些经验,并且在web上遇到过这个指令,但它与我以前见过的任何东西都不一样,我无法理解它在做什么?有人能帮忙吗 具体问题:在不太了解的情况下,指令的签名必须进行依赖项注入。但我正在努力解决的问题是:如果数组中传递了$injector,为什么它也作为函数中的参数发送,即函数($injector);换言之,为什么有两个美元注入器?如果我不将$injector发送到阵列中,什么将不起作用 另外,该指令是如何嵌入控制器的?何时定义此类控制器 此外,我通常会在下面的代码中看到带有$
.directive('mycomp', [
'$injector', function($injector) {
var $builder, $compile, $drag;
$builder = $injector.get('$builder');
$drag = $injector.get('$drag');
$compile = $injector.get('$compile');
return {
restrict: 'A',
scope: {
component: '=mycomp'
},
controller: 'mycompController',
link: function(scope, element) {
scope.copyObjectToScope(scope.component);
$drag.draggable($(element), {
mode: 'mirror',
defer: false,
object: {
componentName: scope.component.name
}
});
return scope.$watch('component.template', function(template) {
var view;
if (!template) {
return;
}
view = $compile(template)(scope);
return $(element).html(view);
});
}
};
}
])
为什么它也作为函数中的参数发送,即函数($injector);换言之,为什么有两个美元注入器
当执行数组类型注入时,不管函数中的参数如何调用,它都会映射到数组项。例如,如果我们有
['$injector', function(a) {..}]
['$injector', '$scope', function(a, b) {..}]
参数a
将映射到$injector
实例,如果我们有
['$injector', function(a) {..}]
['$injector', '$scope', function(a, b) {..}]
a
将映射到$injector
实例,b
将映射到$scope
实例。这里的秩序才是最重要的。更多信息:请参见缩小说明部分
如果我不将$injector发送到阵列中,什么将不起作用
如果不这样做,$injector将是未定义的,上面解释了其中的一些内容
另外,该指令是如何嵌入控制器的?何时定义此类控制器
如果需要的话,一些指令可以有控制器,它们应该包含一些更重的逻辑、$scope绑定等等。链接函数实际上应该只包含与$element的交互。
详情如下:
此外,我通常会在下面的代码中看到带有$前缀的作用域,没有$它是如何工作的
在这种情况下,scope
用于link函数,它不是一个可注入函数。在这种情况下,它是一个简单的变量scope
,它指的是控制器的作用域。您可以将其称为superBigVariableName
,它仍然会引用范围并仍然有效。
所以请记住,链接函数实际上是一个简单的函数,其中第一个属性是范围,第二个是元素,第三个是属性,您不能将服务注入到链接函数中(在控制器中执行该逻辑)
为什么它也作为函数中的参数发送,即函数($injector);换言之,为什么有两个美元注入器
当执行数组类型注入时,不管函数中的参数如何调用,它都会映射到数组项。例如,如果我们有
['$injector', function(a) {..}]
['$injector', '$scope', function(a, b) {..}]
参数a
将映射到$injector
实例,如果我们有
['$injector', function(a) {..}]
['$injector', '$scope', function(a, b) {..}]
a
将映射到$injector
实例,b
将映射到$scope
实例。这里的秩序才是最重要的。更多信息:请参见缩小说明部分
如果我不将$injector发送到阵列中,什么将不起作用
如果不这样做,$injector将是未定义的,上面解释了其中的一些内容
另外,该指令是如何嵌入控制器的?何时定义此类控制器
如果需要的话,一些指令可以有控制器,它们应该包含一些更重的逻辑、$scope绑定等等。链接函数实际上应该只包含与$element的交互。
详情如下:
此外,我通常会在下面的代码中看到带有$前缀的作用域,没有$它是如何工作的
在这种情况下,scope
用于link函数,它不是一个可注入函数。在这种情况下,它是一个简单的变量scope
,它指的是控制器的作用域。您可以将其称为superBigVariableName
,它仍然会引用范围并仍然有效。
所以请记住,链接函数实际上是一个简单的函数,其中第一个属性是范围,第二个是元素,第三个是属性,您不能将服务注入到链接函数中(在控制器中执行该逻辑)一个非常好的解释谢谢,您能为在指令中嵌入控制器的更复杂内容提供一个好的链接吗(为了支持你上一段的解释,不是因为它没有答案,而是为了扩展我在这些方面的知识)?也许在这里:这不是很常见且记录良好的事情:[非常好的解释谢谢,你能为指令中嵌入控制器的更复杂内容提供一个好的链接吗(为了支持你上一段的解释,不是因为它没有回答,而是为了扩大我对这些问题的了解)?也许在这里:这不是很常见,也没有很好的记录:[