我在AngularJS上有一些经验,并且在网上遇到过该指令,但是它与我以前见过的东西不同,我无法理解它在做什么?有人可以帮忙吗?
具体问题:几乎不了解,指令的签名必须在进行依赖项注入。但是我正在努力的是:如果$ injector在数组中传递,为什么它也作为参数在函数中发送,即function($ 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);
});
}
};
}
])
最佳答案
为什么还要在函数中将其作为参数发送,即function($ injector);换句话说,为什么有两个$ injector?
在进行数组类型注入时,函数的参数调用方式实际上并不重要,它将映射到数组项。例如,如果我们有
['$injector', function(a) {..}]
参数
a
将映射到$injector
实例,如果我们有['$injector', '$scope', function(a, b) {..}]
a
将映射到$injector
实例,而b
将映射到$scope
实例。这里的顺序很重要。更多信息,请参见:缩小注释部分中的https://docs.angularjs.org/tutorial/step_05。如果不将$ injector发送到数组中,怎么办?
如果您不这样做,则$ injector将是未定义的,其中一些已在上面说明。
另外,该指令如何嵌入控制器?您何时定义此类控制器?
如果需要,某些指令可以具有控制器,它们应该包含一些较重的逻辑,$ scope绑定等。链接功能实际上应该只包含与$ element的交互。
更多内容:http://www.sitepoint.com/practical-guide-angularjs-directives/
我也通常在下面的代码中看到带有$前缀的范围,没有$怎么工作?
在这种情况下,链接功能中使用了
scope
,它不是注射剂。在这种情况下,它是一个简单的变量scope
,它引用控制器的作用域。您可以将其称为superBigVariableName
,它仍将引用作用域,并且仍将起作用。因此请记住,链接函数实际上是一个简单的函数,其中第一个属性是作用域,第二个是元素,第三个是属性,您不能将服务注入到链接函数中(在控制器中执行该逻辑)
关于javascript - AngularJS:该指令在做什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24308767/