У меня возникли проблемы с пониманием угловых указаний. Я хотел бы использовать простой атрибут для расширения в более сложный html, но некоторые части этого шаблона могут быть заменены с помощью параметров.Угловая директива по использованию ng-blur и ng-focus
Учитывая этот код:
<form role="form" name="databaseForm">
<input type="text" name="connectionName"
ng-focus="databaseForm.connectionName.$focused = true;databaseForm.connectionName.$blurred = false;"
ng-blur="databaseForm.connectionName.$blurred = true;databaseForm.connectionName.$focused = false;"
>
</form>
Я хотел бы написать его, используя более сжатую директиву (например, «размытого-ориентированный»):
<form role="form" name="databaseForm">
<input type="text" name="connectionName"
blurred-focused="'databaseForm.connectionName'"
>
</form>
Так это означает, что я могу очень легко использовать его для других входов:
<form role="form" name="databaseForm">
<input type="text" name="username"
blurred-focused="'databaseForm.username'"
>
</form>
Ожидаемый результат от этого заключается в том, что входы с этой директивой будут иметь автоматически размытые и $ сфокусированные свойства автоматически применяются к нему, основываясь на взаимодействии пользователя со входом.
спасибо.
Update: Я закончил с использованием версии MMHunter, где объем не изолирован. Я добавил некоторую логику, чтобы автоматически найти объект формы и поля, так что мне не нужно было все это указывать.
Моя директива:
(function() {
"use strict";
angular
.module("app.shared.widgets")
.directive("blurredFocused", blurredFocused);
blurredFocused.$inject = ["_"];
/* @ngInject */
function blurredFocused(_) {
return {
restrict: "A",
priority: -1,
link: function(scope, element, attributes) {
element.on("blur", function() {
var formFieldName = element[0].form.name + "." + element[0].name;
var target = _.get(scope, formFieldName);
scope.$apply(function() {
target.$blurred = true;
target.$focused = false;
});
});
element.on("focus", function() {
var formFieldName = element[0].form.name + "." + element[0].name;
var target = _.get(scope, formFieldName);
scope.$apply(function() {
target.$blurred = false;
target.$focused = true;
});
});
}
};
}
})();
И пример его использования:
<form role="form" name="databaseForm">
<input type="text" name="connectionName" blurred-focused>
</form>
Я действительно не понимаю, что вам нужно. Ng-focus и ng-blur являются противоположными директивами, поскольку blur = потерянный фокус. Код ng-focus запускается при размытии фокуса ng. Читайте об этом - http://www.w3schools.com/angular/ng_ng-focus.asp, http://www.w3schools.com/angular/ng_ng-blur.asp –
Я в основном хочу скомпенсировать синтаксис, который у меня есть первый пример в нечто более пригодное для повторного использования, без необходимости копировать и вставлять эту логику повсюду. То, что делает логика, не имеет никакого отношения к вопросу. Я знаю, что размытие и фокус - это противоположности, но я бы хотел, чтобы оба размытых и $ сфокусированных свойства были доступны с одним синтаксисом. – Casey