2016-04-18 10 views
1

Können Sie mich beschreiben, warum ich nicht den Wert der lokalen Variablen directiveElement innerhalb link Funktion der Direktive in ng-click Methode erhalten kann?Ng-Klick-Bereich innerhalb Link der Direktive

Hier Code:

(function() { 
"use strict"; 

angular 
    .module("app") 
    .directive("cell", ABCDirective); 

function ABCDirective() { 
    return { 
     restrict: 'E', 
     template: '<div><button ng-click="doSomething()">Change background</button></div>', 
     link: function(scope, element) { 
      var directiveElement = element; 

      scope.doSomething = function() { 
       **** Uncaught ReferenceError: directiveElement is not defined(…) **** 
      }; 
     } 
    }; 
} 
})(); 
+0

Sie benötigen Modul wie folgt festgelegt: .module („App“, []) – Rob

+0

Was willst du auch von dem Element bekommen? – Rob

+1

Dies ist Teil meines Moduls - Modul ist woanders entstanden. Zweite Sache - ich möchte sagen, ändern Hintergrundfarbe meines Knopfes. – Fka

Antwort

2

Sie so etwas tun kann, Hintergrundfarbe zu ändern:

return { 
      restrict: 'E', 
      template: '<div><button ng-style="{\'background-color\':myColor}" ng-click="doSomething()">Change background</button></div>', 
      link: function(scope, element) { 
       scope.myColor = 'red'; 

       scope.doSomething = function() { 
        scope.myColor = 'blue'; 
       }; 
      } 
     }; 
0

Ich würde nicht empfehlen, in einer Richtlinie CSS-Regeln anzuwenden, wenn Sie es vermeiden können. Stattdessen würde ich empfehlen, eine ng-Klasse festzulegen, damit das Stylesheet die Farbe entsprechend ändern kann.

Das heißt, einen Blick auf dieses Beispiel-Code, um von den docs Quellen:

angular.module('dragModule', []) 
.directive('myDraggable', ['$document', function($document) { 

return { 
link: function(scope, element, attr) { 
    var startX = 0, startY = 0, x = 0, y = 0; 

    element.css({ 
    position: 'relative', 
    border: '1px solid red', 
    backgroundColor: 'lightgrey', 
    cursor: 'pointer' 
    }); 

    element.on('mousedown', function(event) { 
    // Prevent default dragging of selected content 
    event.preventDefault(); 
    startX = event.pageX - x; 
    startY = event.pageY - y; 
    $document.on('mousemove', mousemove); 
    $document.on('mouseup', mouseup); 
    }); 

    function mousemove(event) { 
    y = event.pageY - startY; 
    x = event.pageX - startX; 
    element.css({ 
     top: y + 'px', 
     left: x + 'px' 
    }); 
    } 

    function mouseup() { 
    $document.off('mousemove', mousemove); 
    $document.off('mouseup', mouseup); 
    } 
} 
}; 

}]); 

Quelle: https://docs.angularjs.org/guide/directive

Was die undefinierte Variable, sollten Sie nicht den Funktionsparameter zugewiesen werden müssen eine andere Variable an erster Stelle. Können Sie den Code posten, der diesen Fehler tatsächlich auslöst? (Nicht nur die Fehlermeldung anstelle des Codes)

+0

Danke für die Antwort, aber ich finde mit 'element.on ('...', function() {...});' verwirrend. Ich habe diesen Artikel auf Angulars Seite gelesen und konnte ihre Empfehlungen nicht auf meinen Zweck anwenden. – Fka