Javascript 指令中的AngularJS ControllerA,多个实例覆盖控制器方法
我有一个由指令组成的表格。此表单的两个部分在输入字段、选择项和复选框中是相同的。我使用隔离作用域和控制器语法(bindToController=true)发出了一个指令,其中控制器有一个从复选框上的ngChange触发的方法。我的问题是,我在控制器中为其分配“this”的控制器别名被触发两次,每个指令触发一次。第二次通过控制器别名,在我的示例中是“ctrlVm”,被第二个作用域覆盖 复制此问题的更简单指令和控制器是:Javascript 指令中的AngularJS ControllerA,多个实例覆盖控制器方法,javascript,angularjs,Javascript,Angularjs,我有一个由指令组成的表格。此表单的两个部分在输入字段、选择项和复选框中是相同的。我使用隔离作用域和控制器语法(bindToController=true)发出了一个指令,其中控制器有一个从复选框上的ngChange触发的方法。我的问题是,我在控制器中为其分配“this”的控制器别名被触发两次,每个指令触发一次。第二次通过控制器别名,在我的示例中是“ctrlVm”,被第二个作用域覆盖 复制此问题的更简单指令和控制器是: function myDirective() { var directiv
function myDirective() {
var directive = {
restrict: 'AE',
priority: 100,
require: 'ngModel',
scope: {
boundObject: '=boundObj',
myArray: '='
},
templateUrl: 'myTemplate.html',
controller: controller,
controllerAs: 'ctrlVm',
bindToController: true
};
return directive;
function controller() {
ctrlVm = this;
ctrlVm.runTest = runTest;
function runTest() {
ctrlVm.myArray.push(ctrlVm.boundObject.first);
}
}
}
有关上述代码和html的完整演示,请访问:
我基本上调用了两次指令,并期望它们产生“1”或“2”,这取决于您在哪个框中单击。但是正如您所看到的,第一个控制器被第二个控制器“覆盖”,无论您选中哪个框,它都会触发第二个指令的函数,并向数组中添加一个“2”,无论您单击哪个框
我一整天都在做详尽的搜索,一路上还学到了其他一些东西,但是没有找到与此问题相关的多个引用,这两个引用似乎都意味着需要两个具有不同controllerAs别名的不同指令,或者需要一个接受controllerAs名称变量名的指令。这两种解决方案似乎都需要两种不同的视图,因为我的视图包括controllerAs别名的使用(现在这两种指令的使用方式不同)
那么,有没有办法做到这一点,重用控制器和controllerAs语法,并分别为这两个指令提供示例runTest()函数?谢谢您的帮助。在控制器中,对于指令,您没有声明变量ctrlVm 因此,改变:
function controller() {
ctrlVm = this;
ctrlVm.runTest = runTest;
function runTest() {
ctrlVm.myArray.push(ctrlVm.boundObject.first);
}
}
致:
谢谢肖恩,我的同事刚刚也注意到了这一点。显然,我发现使用controllerAs语法的示例没有声明var,因此我认为这是bind语法的一个特例。我把它添加到我的实际代码中,问题就解决了。它从未标记错误,所以我从未捕捉到它。谢谢你的关注。
function controller() {
var ctrlVm = this;
ctrlVm.runTest = runTest;
function runTest() {
ctrlVm.myArray.push(ctrlVm.boundObject.first);
}
}