我正在尝试创建一个将在应用程序中的多个位置使用的指令,我希望它可以选择加入控制器。
使用控制器方法时
return {
...
controller: 'BlogDashCourseCtrl',
...
}
它让控制器变好了。但是当我需要它时
return {
...
require: '^BlogDashCourseCtrl',
...
link: function($scope, iElm, iAttrs) {
$scope.title = iAttrs.title; // Do not share me with other directives
if($scope.title === $scope.step) { // $scope.step comes from a shared scope
...
}
}
}
它无法找到控制器。
我不希望多次调用控制器。我只是希望指令共享一个范围,也有一个私有范围(所以指令中的$ scope不会冒泡)并用服务做一些事情。
答案 0 :(得分:0)
指令附加到DOM节点。 DOM节点不能有两个范围。您可以共享父作用域,也可以创建一个已隔离的作用域并显式继承它。
BlogDashCourseCtrl:
this.step = 'whatever'; //maybe $scope.step
SomeDirective:
return {
...
require: '^BlogDashCourseCtrl',
...
link: function($scope, iElm, iAttrs, blogDashCourseCtrl) {
$scope.title = iAttrs.title; // Do not share me with other directives
if($scope.title === blogDashCourseCtrl.step) { // $scope.step comes from a shared scope
...
}
}
}
请注意blogDashCourseCtrl
不引用该指令/控制器的$scope
,而是引用本身。
这里有extensive documentation,有例子。