Angularjs 指令层次结构&;活页夹控制器

Angularjs 指令层次结构&;活页夹控制器,angularjs,angularjs-directive,angularjs-scope,angularjs-controller,angular-directive,Angularjs,Angularjs Directive,Angularjs Scope,Angularjs Controller,Angular Directive,我在编写AngularJS指令时遇到了一个问题。 我实际上在尝试融合两个原则,指令继承和使用控制器对象(著名的this)而不是$scope 我有这样的想法: angular .module('应用程序') .指令('dle','dLed'); 函数(){ 返回{ 要求:[“^dFeature”,“DLE”], 限制:'E', 范围:正确, controllerAs:'vm', 链接:链接器, 控制器:LED控制器, bindToController:对, templateUrl:'app/fea

我在编写AngularJS指令时遇到了一个问题。
我实际上在尝试融合两个原则,指令继承和使用控制器对象(著名的
this
)而不是
$scope

我有这样的想法:

angular
.module('应用程序')
.指令('dle','dLed');
函数(){
返回{
要求:[“^dFeature”,“DLE”],
限制:'E',
范围:正确,
controllerAs:'vm',
链接:链接器,
控制器:LED控制器,
bindToController:对,
templateUrl:'app/features/templates/led.html'
};
在链接器中,我想将继承自父指令控制器的
功能
对象注入本地控制器:

函数链接器(作用域、元素、属性、CTRL){
var featureCtrl=ctrls[0];
var localCtrl=ctrls[1];
localCtrl.feature=featureCtrl.feature;
}  
然后,我想基于相同的
功能
对象,在控制器中添加一些额外的行为:

功能控制器(){
var vm=这个;
vm.getClasses=getClasses;
函数getClasses(){
var类别=”;
class+=vm.feature.state?“开”:“关”;
if(vm.feature.options.color){
类+=“”+vm.feature.options.color;
}   
返回类;
}
}
};
问题是在我的链接器函数中作为参数传递的
localCtrl
对象是真实控制器对象的克隆,因此当添加
功能时,无法从
ledController
函数访问它

但是,在编译模板的过程中可以很好地找到
功能
对象

下面是该应用程序的一个插件:


有什么问题?我使用控制器(或链接器)的方式是否正确

如果您希望指令在其
控制器
链接
功能之间共享数据,实现这一点的一种方法是将数据放在
$scope

在本例中,您似乎希望在子指令的控制器中使用父控制器(
localCtrl
)。由于父控制器仅注入链接函数,我们需要将此变量附加到
$scope
中,我们希望它在
控制器中可用:

我更新了plunker来实现这一点,如果你打开控制台,你会注意到对象现在是可用的

链接

scope.vm = localCtrl;
控制器

var localCtrl = $scope.vm;
叉式打捞器

var localCtrl = $scope.vm;

如果您希望指令在其
控制器
链接
功能之间共享数据,实现这一点的一种方法是将数据放在
$scope

在本例中,您似乎希望在子指令的控制器中使用父控制器(
localCtrl
)。由于父控制器仅注入链接函数,我们需要将此变量附加到
$scope
中,我们希望它在
控制器中可用:

我更新了plunker来实现这一点,如果你打开控制台,你会注意到对象现在是可用的

链接

scope.vm = localCtrl;
控制器

var localCtrl = $scope.vm;
叉式打捞器

var localCtrl = $scope.vm;

感谢您的回答,但这里您只需通过
vm
对象将作用域绑定到控制器。为什么传递给链接器的控制器不是“真实”的控制器对象,而是它的克隆?我应该在哪里编写我的特定代码?我应该这样做吗(plnkr.co/edit/i3ppovuxhso1li6nhbw?p=preview)?我想去掉控制器中的
$scope
对象…谢谢你的回答,但这里你只需要通过
vm
对象将作用域绑定到控制器。为什么传递给链接器的控制器不是“真实”的控制器对象,而是它的克隆?我应该在哪里编写我的特定代码?我应该这样做吗(plnkr.co/edit/i3ppovuxhso1li6nhbw?p=preview)?我想去掉控制器中的
$scope
对象。。。