我有一个关于控制器和指令之间的功能可见性的问题。我有一个控制器和一个指令。该指令看起来像这样
(function() {
'use strict';
angular
.module('myproject.schedule')
.directive('dirname', dirname);
function dirname() {
var directive = {
restrict: 'A',
replace: true,
scope: {
currentDateScheduler: "=",
...
},
controller: DirnameController,
controllerAs: 'vm',
bindToController: true,
templateUrl: ... directive.html
我的控制器看起来像这样:
(function() {
'use strict';
angular
.module('myproject.schedule')
.controller('MyController', MyController);
...
在directive.html文件中,我有一个 ng-click ,它调用了我的控制器的功能 - 这很好用。
实际上现在我不确定为什么?我认为指令有自己的命名空间,我的控制器的功能在... directive.html中不可见。
非常感谢你的帮助!
答案 0 :(得分:0)
控制器范围可用于在声明控制器的DOM元素中显示为子节点的任何指令。 E.g。
<div ng-controller="ctrl1">
<dirname></dirnam> <!-- this has access to ctrl1 scope -->
</div>
因此,如果您要在另一个控制器中使用该指令,则可以访问该控制器范围。这意味着如果控制器中存在该指令所声明的功能,那么ng-click将不执行任何操作。
在指令中,您可以声明一个控制器,在此控制器中声明的任何内容都将覆盖指令中同名的控制器函数。 E.g。
angular.module('myApp',[])
.controller('myController',function($scope){
$scope.clickMe = function(){
alert('clicked from the controller');
}
})
.directive('dirname', function(){
return {
controller: function($scope){
$scope.clickMe = function(){ alert('clicked from directive'); };
},
};
});
控制器也可以嵌套。在这种情况下,范围再次具有自上而下的效果,其中在最顶层控制器中定义的函数可用于子控制器中包含的dom元素。此外,如果此子控制器声明了相同的函数,那么这些将覆盖父控制器的功能。
希望这有帮助