我正在使用“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
答案 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");
}
}
}
]);