Использовать НГ-нажмите кнопку против привязки в функции связи угловых директива
в функции link существует ли более "угловой" способ привязки функции к событию click?
прямо сейчас, я делаю...
myApp.directive('clickme', function() {
return function(scope, element, attrs) {
scope.clickingCallback = function() {alert('clicked!')};
element.bind('click', scope.clickingCallback);
} });
это угловой способ сделать это или это грязный хак? Возможно, мне не стоит так беспокоиться, но я новичок в этой структуре и хотел бы знать "правильный" способ делать вещи, особенно когда структура движется вперед.
6 ответов:
вы можете использовать контроллер в директиве:
angular.module('app', []) .directive('appClick', function(){ return { restrict: 'A', scope: true, template: '<button ng-click="click()">Click me</button> Clicked {{clicked}} times', controller: function($scope, $element){ $scope.clicked = 0; $scope.click = function(){ $scope.clicked++ } } } });
подробнее о директивы Угловое руководство. И очень полезным для меня было видео из официального углового блога об этих директивах.
Я думаю, что это нормально, потому что я видел много людей, делающих так.
Если вы просто определяете обработчик событий в директиве, однако вам не нужно определять его в области видимости. Следование было бы прекрасно.
myApp.directive('clickme', function() { return function(scope, element, attrs) { var clickingCallback = function() { alert('clicked!') }; element.bind('click', clickingCallback); } });
разве это не должно быть просто:
<button ng-click="clickingCallback()">Click me<button>
почему вы хотите написать новую директиву только для сопоставления события click с обратным вызовом в вашей области ? ng-click уже делает это за вас.
вы должны использовать контроллер в директиве и ng-click в шаблоне html, как предлагалось в предыдущих ответах. Однако, если вам нужно сделать манипуляцию DOM на событии(click), например, при нажатии кнопки, вы хотите изменить цвет кнопки или так, а затем использовать функцию Link и использовать элемент для управления dom.
Если все, что вы хотите сделать, это показать некоторое значение на HTML-элементе или любой такой не-dom манипулятивной задачи, то вам может не понадобиться директива, и смогите сразу использовать регулятор.
в этом случае нет необходимости в директиве. Это делает работу :
<button ng-click="count = count + 1" ng-init="count=0"> Increment </button> <span> count: {{count}} </span>
Источник:https://docs.angularjs.org/api/ng/directive/ngClick