如何创建指令控制器?

时间:2016-04-06 01:46:55

标签: javascript angularjs

我的问题是,我找不到任何关于此的官方文档。

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

这里的语法是什么?

3 个答案:

答案 0 :(得分:2)

指令的链接功能只是一个普通的JavaScript函数,其类型签名为范围元素属性按顺序对象。如果要翻转参数并声明我们的链接函数如下:

link: function(attr, elem, scope) {
      console.log(scope)
    }

第一个参数(现在称为attr)仍然是范围对象。

与链接功能不同,Angular的注入系统会调用控制器功能。

"$"中的

"$scope"表示范围值正被注入当前上下文。但是,并非所有对范围的引用都基于依赖注入。例如,在$watch, link, and cloning函数(不是详尽列表)中,范围始终作为位置参数传递,而不管其名称如何。

你可以参考这些文章: 的 $scope vs scope

angular - $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) {}]相同。