Javascript Angular JS-该指令可在控制器之间访问
我不熟悉Angular,只是想知道为什么我的指令可以在控制器之间访问,因为我只将其注册到子控制器,而不是主应用程序控制器。下面是我的代码 app.module.jsJavascript Angular JS-该指令可在控制器之间访问,javascript,angularjs,angularjs-directive,angularjs-controller,Javascript,Angularjs,Angularjs Directive,Angularjs Controller,我不熟悉Angular,只是想知道为什么我的指令可以在控制器之间访问,因为我只将其注册到子控制器,而不是主应用程序控制器。下面是我的代码 app.module.js angular.module('adminPage', ['ngRoute', 'ui.bootstrap', 'ngAnimate', 'login', 'registerEmployee', 'listEmployee']) .controller('adminPageCtrl', ['$scope', '$locati
angular.module('adminPage', ['ngRoute', 'ui.bootstrap', 'ngAnimate', 'login', 'registerEmployee', 'listEmployee'])
.controller('adminPageCtrl', ['$scope', '$location' , funcAdminPageCtrl]);
angular.module('login',[]);
angular.module('registerEmployee', []);
angular.module('listEmployee', []);
angular.module('registerEmployee')
.controller('registerEmployeeCtrl', ['$scope', funcRegisterEmployeeCtrl
])
.directive("compareTo", ['$timeout', funcCompareTo]);
如上所述,我有adminPage
作为主控制器,其他作为子控制器
registereemployeecontroller.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', []);
angular.module('registerEmployee')
.controller('registerEmployeeCtrl', ['$scope', funcRegisterEmployeeCtrl
])
.directive("compareTo", ['$timeout', funcCompareTo]);
如上所述,我将compareTo
指令注册到registerEmployee
子控制器
我想在listEmployeeController.js
的ModalInstanceCtrl
(弹出窗口)中使用相同的指令,因此我添加了相同的指令。当我测试它时,我得到的错误是错误:[$compile:multidir]多个指令[compareTo,compareTo]要求在:
上创建新的/隔离的作用域。代码如下
angular.module('listEmployee')
.controller('listEmployeeCtrl', ['$scope', '$uibModal', '$log', '$document', funcListEmployeeCtrl ])
.controller('ModalInstanceCtrl', funcModalInstanceCtrl)
.directive("compareTo", ['$timeout', funcCompareTo]);
之后,我尝试从listEmployeeController.js
中删除compareTo
指令,错误消失了。因此,即使未注册到其控制器,compareTo
指令也可以在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
中注册了该指令,为什么该指令存在于ModalInstanceCtrl
中?您似乎将模块与控制器混淆了。您不需要向特定控制器注册指令,只需向模块注册一次指令,就可以在将该模块注入应用程序的任何地方使用指令。@Claies这是有意义的。谢谢你的解释,谢谢!