AngularJS指令控制器与"控制器通信...."句法

时间:2014-05-19 20:37:51

标签: angularjs angularjs-directive angularjs-controller

我正在使用“Controller as”语法,并且处于我希望指令与Controller通信的情况。

当我不使用“Controller as”语法时,我可以使用它。 Plunkr链接下面的工作和非工作版本。

另外 - 我很想知道这种方法是否符合“角度方式”。

不起作用:

<body ng-controller="MainCtrl as main">
  <div char-count>I like characters, they fill content with stuffs.</div>
  <p>{{main.chars}} characters inside the char-count directive!</p>
</body>

和...

app.controller('MainCtrl', ['$scope', '$window', 
  function($scope) {
    this.name = 'World';
    this.chars = 0;
    this.setCharCount = function(elem) {
      this.chars = elem[0].innerHTML.length - 1;
    }
  }
]);

app.directive('charCount', ['$window',
  function($window) {
    return {
      link: function(scope, elem, attrs) {
        scope.name = "this setting of scope works!";
        scope.setCharCount(elem);
        elem.css("width", scope.chars + "px");
      }
    }
  }
]);

Plunkr工作版: http://plnkr.co/edit/9JaQDwxDmE9uDqq7v0Xv?p=preview

具有“Controller as”语法的Plunkr非工作版本: http://plnkr.co/edit/dIoq9r66mOhuMSQK7woj?p=preview

1 个答案:

答案 0 :(得分:1)

在“控制器为”版本中,您将方法和属性分配给this(控制器),该范围在您给出的“as”名称的范围内可用(在本例中,你正在使用“MainCtrl作为主”,因此控制器可以作为scope.main)访问。 “controller as”指令的工作版本如下所示:

app.directive('charCount', ['$window',
  function($window) {
    return {
      link: function(scope, elem, attrs) {
        scope.main.name = "this setting of scope works!";
        scope.main.setCharCount(elem);
        elem.css("width", scope.main.chars + "px");
      }
    }
  }
]);