2013-07-31 2 views
13

Мне нужно закрыть любой открытый компонент, щелкнув вне этого компонента с помощью угловых символов. Есть ли угловая директива для размытия событий? Если нет, как я могу это сделать?Что такое замена размытия jQuery в AngularJS?

+0

Первый ответ правильный, но я хотел бы отметить, что это не событие jqury, это событие javascript. Если вы хотите получить действительно хорошее программирование на стороне клиента, попробуйте выяснить, что делает jquery под капотом. – bigblind

ответ

7

Вы можете использовать угловую UI @http://angular-ui.github.io/ui-utils/ которые обеспечивают размывают, Focus, дважды щелкает событие или Bind обратного вызова в любом случае изначально не поддерживается угловым Js

Ниже один из примера события размытия:

<input ui-event="{ blur : 'blurCallback()' }"> 

<script> 
$scope.blurCallback = function() { 
alert('Goodbye'); 
}; 
</script> 
+0

sir использует его в моем приложении, но ui-event - это огонь перед изменением значения модели. Я вызываю функцию test (ng-model) на ui-event = {blur:} в функции, которая покажет мне старое значение, а также в первый раз undefined –

0

директив, поддерживающих фокус и размытия события будут включены в следующий релиз AngularJS (reference), который должен быть в ближайшее время (я думаю, в течение следующего месяца). Если вы не можете ждать, как это предлагает JQueryGuru, вы можете использовать директиву uiEvent проекта AngularUI.

25

Если вы не хотите использовать угловые ui's ui-event, вы также можете создать небольшую директиву до тех пор, пока не будет выпущена следующая версия Angular.

app.directive('ngBlur', function() { 
    return function(scope, elem, attrs) { 
    elem.bind('blur', function() { 
     scope.$apply(attrs.ngBlur); 
    }); 
    }; 
}); 

Просто поместите директиву, где вам это нужно:

<input type="text" ng-model="foo" ng-blur="doFoo()" /> 

В основном то, что директива делает это связать событие размытия элемента (в нашем примере на входе), а затем, когда событие (мы оставляем вход) угловой будет применять то, что находится в директиве. Поэтому в нашем случае doFoo() будет запущен, если мы оставим вход.

Plunker здесь: http://plunker.co/edit/J4ZEB6ppvkiIvdW9J2VU?p=preview

+1

Эй, Иисус, когда я добавляю это в свой код, он говорит: «Невстреч ReferenceError: приложение не определено 'wtf? – pythonian29033

+0

ng-blur не работает со стабильной версией, должна использоваться самая последняя, ​​нестабильная версия. – pythonian29033

+1

'app' - это просто ссылка на мой модуль. используйте 'angular.module ('yourmodule'). директива ...'. Угловой 1.2 поставляется с директивой размытия, так что это для 1.0.x или 1.1.x –

1

Уроженец нг-Размытие «Не работает вообще в последнее неустойчиво :(» http://docs.angularjs.org/api/ng.directive:ngBlur

Yo это можно исправить, выполнив действия этого поста «Там нет прямой поддержки события размытия в AngularJs. Но мы можем добавить поддержку события размытости путем создания директивы.» http://coding-issues.blogspot.in/2013/10/angularjs-blur-directive.html

4

на угловых 1.2.24 *, есть ng-blur директивы.

// View 
<input 
    type="text" 
    placeholder="Hello World!" 
    ng-model="foo.bar" 
    ng-blur="onBlur($event)" 
    > 

// Controller 
$scope.onBlur = function($event) { 
    return $event; 
} 

* Не знаю, в чем была введена угловая версия ng-blur.