Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular JS-该指令可在控制器之间访问_Javascript_Angularjs_Angularjs Directive_Angularjs Controller - Fatal编程技术网

Javascript Angular JS-该指令可在控制器之间访问

Javascript 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,只是想知道为什么我的指令可以在控制器之间访问,因为我只将其注册到子控制器,而不是主应用程序控制器。下面是我的代码

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', []);
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这是有意义的。谢谢你的解释,谢谢!