2016-04-06 19 views
0

Ich bin neu in angularjs. Ich habe eine div # single Ich möchte die Hintergrundfarbe ändern und dann Back-End-Server auf dem Click-Ereignis aufrufen. Ich weiß nicht, wie das in angularjs benutzerdefinierte Richtlinie zu tun. Jede Hilfe wird b, meine HTML-Code geschätztWie registriere ich click event in Direktive in angularjs

<div id="single" class="" ng-style="{'background':x.is_read == 0 ? 
'rgba(98, 95, 95, 0.87)': '#A4A4A4'}" ng-repeat="x in notification" chang-color> 

changColor Richtlinie ist, die Code verfolgt haben. Bitte helfen Sie mir, wie diese Sie sollten element.bind statt element.on

var app = angular.module('smac', []); 
app.controller('asd',function ($http,$scope) { 

app.directive("changColor", function() { 

return { 
     restrict: 'A', 
     scope: {}, 
     link: link 
    }; 
     function link (scope, element) { 
     element.on('click', onClick); 
    } 

    function onClick() { 
     alert('as'); 
     $(this).css({ 'background': '#A4A4A4' }); 
    // after this back end call 
    } 



    }); 
    }); 
+0

Die Direktive erstellt einen Isolationsbereich, der die Variable 'notification' in der 'ng-Wiederholung' isoliert. Auch die Stiländerungen in der benutzerdefinierten Direktive konkurrieren mit der 'ng-Stil'-Direktive. – georgeawg

+0

Sie sagen, ich habe bereits die Implementierung der ng-Klasse und wiederhole die Direktive, damit ich keine weitere Direktive anwenden kann? @georgeawg – Asad

+0

Sie können Direktiven für dasselbe Element kombinieren, aber Sie müssen vermeiden, dass die Bereiche Konflikte haben. Siehe [AngularJS Comprehensive Directive API - Umfang] (https://docs.angularjs.org/api/ng/service/$compile#-scope-). – georgeawg

Antwort

0

tun verwenden. Das Zielelement kann über das Ereignisziel oder einfach über dieses Ziel erreicht werden.

var app = angular.module('smac', []); 

app.controller('asd',function ($http,$scope) { 
    // this is controller body 
}); 

app.directive("changColor", function() { 
    return { 
    restrict: 'A', 
    scope: {}, 
    link: link 
    }; 

    function link(scope, element) { 
    element.bind('click', onClick); 
    } 

    function onClick (e) { 
    alert('as'); 
    // Following lines as equal 
    e.target.style.background = "#A4A4A4"; 
    this.style.background = "#A4A4A4"; 
    angular.element(this).css("background","#A4A4A4"); 
    // after this back end call 
    } 
}); 
+0

es funktioniert nicht :( – Asad

+0

Bitte beachten Sie meine aktualisierte Code. Ihre Richtlinie ist in einem Controller definiert. Es sollte außerhalb als separate Winkelkomponente definiert werden. –

+0

Für den Nachweis der Arbeit der Richtlinie überprüfen https://plnr.co/edit/ UwFfrpQc0py1RA7q90id –

Verwandte Themen