我的问题是,我找不到任何关于此的官方文档。
https://docs.angularjs.org/guide/directive无意义地建议
controller: ['$scope', function($scope) {
为什么我不能在这里省略$
,就像link function(scope, elem, attrs) {
一样? controller: ['scope', function(scope) {
会导致错误"Error: [$injector:unpr] Unknown provider: scopeProvider <- scope
这里的语法是什么?
答案 0 :(得分:2)
指令的链接功能只是一个普通的JavaScript函数,其类型签名为范围,元素,属性按顺序对象。如果要翻转参数并声明我们的链接函数如下:
link: function(attr, elem, scope) {
console.log(scope)
}
第一个参数(现在称为attr)仍然是范围对象。
与链接功能不同,Angular的注入系统会调用控制器功能。
"$"
中的 "$scope"
表示范围值正被注入当前上下文。但是,并非所有对范围的引用都基于依赖注入。例如,在$watch, link, and cloning
函数(不是详尽列表)中,范围始终作为位置参数传递,而不管其名称如何。
你可以参考这些文章: 的 $scope vs scope 强>
答案 1 :(得分:0)
$scope
中的function($scope)
是依赖项'$scope'
的别名。你可以在那里重命名。
Edited Plunkr from the documentation
JS代码的相关部分:
controller: ['$scope', function(scope) { // "scope" as an alias
var panes = scope.panes = [];
scope.select = function(pane) { // $scope renamed
angular.forEach(panes, function(pane) {
pane.selected = false;
});
pane.selected = true;
};
this.addPane = function(pane) {
if (panes.length === 0) {
scope.select(pane); // $scope renamed
}
panes.push(pane);
};
}],
答案 2 :(得分:0)
有关所谓directive definition object
的官方文档可在API Reference for $compile中找到。
directive controller constructor function
可注入本地人$scope
,$element
,$attrs
和$transclude
。注入这些。因此,他们的确切拼写很重要。
通过directive controller
创建controller:function($scope) {}
与创建controller:['$scope', function(scope) {}]
相同。