2017-05-22 4 views
0

Fetching den Namen des Controller

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; 
 
     } 
 
    }; 
 
    });
<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>

Hallo, hier habe ich den Namen des Controllers erhalten versuche durch Direktive

  1. Typ 1: Richtlinie Hier controller-name ist mit einem Elternteil Controller namens MainController und es ist ein eigener Controller in der Richtlinie mit dem Namen directiveCtrl definiert ... aber wenn ich versuche, den Controller-Namen ia zugreifen Ich bekomme den Namen als MainController nicht directiveCtrl ... warum ???
  2. Typ 2: Hier i den Wert directiveCtrl bin immer wie es draußen ist ... jemand im Detail erklären kann Vielen Dank im Voraus bitte
+1

Was Anwendungsfall für je brauchen würde dies in erster Linie zu tun ? – charlietfl

+1

Wissen und Zeitüberschreitung – Abhishek

Antwort

1

Aus der Dokumentation von element.controller():

controller(name) - ruft den Controller des aktuellen Elements oder seines übergeordneten Elements ab. Ruft standardmäßig den Controller ab, der mit der ngController-Direktive verknüpft ist. Wenn name als camelCase Direktivenname bereitgestellt wird, wird der Controller für diese Anweisung abgerufen (z. B. 'ngModel').

Die Funktion ruft den übergeordneten Controller mit ng-controller ab. Dies ist ein normales Verhalten, wie Sie in Typ 1 definiert:

<div ... ng-controller="MainController"> 
     ... 
    </div> 

Und in Typ 2:

<div ... 
    <div ng-controller="directiveCtrl"> 
     ... 
    </div> 
    </div> 
+0

Wenn Name als camelCase-Direktivenname angegeben ist, wird der Controller für diese Anweisung abgerufen ... was ist, wenn der Name nicht in camelCase ist – Abhishek

Verwandte Themen