2016-04-06 2 views
0

Im new in angularjs. У меня есть div #single, я хочу изменить цвет фона, а затем хочу, чтобы сервер back-end вызывал событие click. Я не знаю, как это делается в пользовательской директиве angularjs. любая помощь будет оценена б моего HTML кодКак зарегистрировать событие click в директиве в 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 является директивой, имеет следующий код. пожалуйста, помогите мне, как это сделать

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

Директива создает изоляционную область, которая изолирует переменную 'уведомление' в' ng-repeat'. Также изменения стиля в пользовательской директиве конкурируют с директивой 'ng-style'. – georgeawg

+0

Вы говорите, что у меня уже есть ng-класс и повторяется директива по этому поводу, поэтому я не могу применить дальнейшую директиву? @georgeawg – Asad

+0

Вы можете комбинировать директивы с одним и тем же элементом, но вам нужно избегать конфликтов областей. См. [Комплексная директива по API-интерфейсу AngularJS] (https://docs.angularjs.org/api/ng/service/$compile#-scope-). – georgeawg

ответ

0

Вы должны использовать element.bind вместо element.on. Доступ к целевому элементу возможен через цель события или просто это.

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

его не работает :( – Asad

+0

См. Мой обновленный код. Ваша директива определена внутри контроллера. Она должна быть определена снаружи как отдельный угловой компонент. –

+0

Для проверки работы директивы проверьте https://plnkr.co/edit/ UwFfrpQc0py1RA7q90id –

Смежные вопросы