var app = angular.module('app', [])
app.controller('MainController', function MainController() {})
app.controller('directiveCtrl', function directiveCtrl() {})
.directive('controllerName', function($timeout) {
return {
restrict: 'A',
template: '<div>My controller name is: {{cName}}</div>',
controller: 'directiveCtrl',
link: function($scope, elem, attrs) {
var name;
console.log("printing");
name = elem.controller().constructor.name;
$scope.cName = name;
}
};
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js">
</script>
<div ng-app="app" class="container">
<div id="target" ng-controller="MainController">
<div>Type1</div>
<div controller-name></div>
</div>
***************************************************
<div id="target" ng-controller="MainController">
<div ng-controller="directiveCtrl">Type2
<div controller-name></div>
</div>
</div>
<hr/>
</div>
&#13;
您好,我在这里尝试使用指令
获取控制器的名称controller-name
有一个名为MainController
的父控制器,它在控制器中定义了名为directiveCtrl
的控制器...但是当我尝试访问控制器名称时我的名字是MainController
而不是directiveCtrl
......为什么??? 答案 0 :(得分:1)
来自element.controller()
的文档:
controller(name)
- 检索当前元素或其父元素的控制器。默认情况下检索与之关联的控制器 ngController指令。如果name
以camelCase的形式提供 指令名称,然后是该指令的控制器 检索(例如'ngModel'
)。
该函数获取使用ng-controller
定义的父控制器。这是正常行为,正如您在类型1 :
<div ... ng-controller="MainController">
...
</div>
在类型2 :
中 <div ...
<div ng-controller="directiveCtrl">
...
</div>
</div>