2016-07-29 18 views
0

Ich möchte eine Direktive erstellen, die Scope-Parameter und ng-controler beide hat.benutzerdefinierte angularjs Direktive mit Bereich und ng-Controller

Dies ist, wie diese Richtlinie aussehen sollte:

<csm-dir name="scopeParam" ng-controller="RegisteredController"> 
    <!--Here I want to have content--> 
    {{name}} 
</csm-dir> 

I "RegistertedController" erklärt haben, irgendwo in meiner app.

angular.module('app') 
    .controller('RegisteredController', ['$scope', function ($scope) { 
     //$scope.name should be accessible here 
    }]); 

Und ich versuche Richtlinie zu erklären:

angular.module('app') 
    .directive('csmDir', [function() { 
     return { 
      restrict: 'AE', 
      replace: true, 
      transclude: true, 
      scope: { 
       name: '=' 
      }, 
      template: '<section class="layout"><ng-transclude></ng-transclude></section>', 
      link: function (scope, element, attr, ctrl, transclude) { 
       element.find('ng-transclude').replaceWith(transclude()); 
       //here I also need scope.name parameter 
      } 
     }; 
    }); 

ich Fehler:

Multiple directives [ngController, csmDir] asking for new/isolated scope on: <csm-dir name="scopeParam" ng-controller="RegisteredController"> 

Jetzt ist dieser Fehler sehr informativ, und ich bekomme es Winkel funktioniert nicht Ich möchte hier.

Ich könnte "Scope: {..}" -Parameter aus der Direktive entfernen und im Controller definieren, aber es ist nicht das, was ich brauche.

Was ich brauche, ist im Grunde zu liefern ng-Controller zu benutzerdefinierten Direktive, und dann zusätzliche Scope-Variablen für diesen Controller.

Wie kann ich das erreichen?

+0

reichen die AngularJS-Komponenten nicht aus? – doge1ord

Antwort

0

Sie müssen Ihre Anweisung mit Tag umhüllen und Controller dort setzen.

<div ng-controller="RegisteredController"> 
    <csm-dir name="scopeParam"> 
     <!--Here I want to have content--> 
     {{name}} 
    </csm-dir> 
</div> 

Es gibt keine Möglichkeit, zwei isolierte Bereiche in einem Tag zu erhalten.

+0

Ja, das würde es machen, aber ich frage mich, ob ich die ng-controller-Direktive in eine andere Direktive einfügen kann –

+0

Sie können lustige Sache machen. Erstellen Sie eine Elternanweisung und verknüpfen Sie sie mit dem Controller. Fügen Sie dann die Child-Direktive mit der Option require hinzu. Und auf den Controller zugreifen. Ist es o.k? – Vitalii