我是Angular的新手,只是想知道如何在控制器之间访问我的指令,因为我只将它注册到子控制器,而不是主应用控制器。以下是我的代码。
app.module.js
angular.module('adminPage', ['ngRoute', 'ui.bootstrap', 'ngAnimate', 'login', 'registerEmployee', 'listEmployee'])
.controller('adminPageCtrl', ['$scope', '$location' , funcAdminPageCtrl]);
angular.module('login',[]);
angular.module('registerEmployee', []);
angular.module('listEmployee', []);
如上所述,我adminPage
充当主控制器,其他充当子控制器。
registerEmployeeController.js
angular.module('registerEmployee')
.controller('registerEmployeeCtrl', ['$scope', funcRegisterEmployeeCtrl
])
.directive("compareTo", ['$timeout', funcCompareTo]);
如上所示,我将compareTo
指令注册到registerEmployee
子控制器。
我想在listEmployeeController.js
的{{1}}(弹出窗口)中使用相同的指令,所以我添加了相同的指令。当我测试它时,我得到的错误是ModalInstanceCtrl
。代码如下。
Error: [$compile:multidir] Multiple directives [compareTo, compareTo] asking for new/isolated scope on:
之后我尝试从angular.module('listEmployee')
.controller('listEmployeeCtrl', ['$scope', '$uibModal', '$log', '$document', funcListEmployeeCtrl ])
.controller('ModalInstanceCtrl', funcModalInstanceCtrl)
.directive("compareTo", ['$timeout', funcCompareTo]);
删除compareTo
指令,错误消失了。然后,它按预期工作(listEmployeeController.js
指令可用于compareTo
的模态),即使它没有注册到其控制器。
我的 funcCompareTo 如下所示。
listEmployeeView.html
由于我只在function funcCompareTo($timeout) {
return {
require: "?ngModel",
scope: {
otherModelValue: "=compareTo"
},
link: function(scope, element, attributes, ngModel) {
$timeout(function(){
if (!ngModel) {
console.log("can't get ngModel.");
return;
}
ngModel.$validators.compareTo = function(modelValue) {
console.log(modelValue+"; "+scope.otherModelValue);
if (modelValue == '') return true;
return modelValue == scope.otherModelValue;
};
scope.$watch("otherModelValue", function() {
ngModel.$validate();
});
}, 0);
}
};
}
注册了指令,为什么registerEmployeeCtrl
中存在该指令?