获取控制器的名称

时间:2017-05-22 10:54:04

标签: javascript angularjs



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;
&#13;
&#13;

您好,我在这里尝试使用指令

获取控制器的名称
  1. 类型1 : 这里指令controller-name有一个名为MainController的父控制器,它在控制器中定义了名为directiveCtrl的控制器...但是当我尝试访问控制器名称时我的名字是MainController而不是directiveCtrl ......为什么???
  2. 类型2 : 在这里我得到值directiveCtrl,因为它在外面... 任何人都可以详细解释一下 提前致谢

1 个答案:

答案 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>