РЕШЕНИЯ -Угловой директива инъекционной DOM элемент с событием щелчка - решаемые
Спасибо пользователя более на форуме Google показал мне свойство controllerAs для директив. Эта версия теперь работает отлично:
angular
.module('app')
.directive('userSearch', userSearch);
function userSearch($compile){
return {
controller: function()
{
this.search = function() {
alert('Test');
};
},
link: function (scope, element, attrs) {
element.bind('focus', function() {
var nextElement = element.parent().find('.openuserdialog').length;
if (nextElement === 0) {
var btn = '<img src="' + homePath + 'Images/zoomHS.png" ' +
'ng-click="userSearch.search()" ' +
'class="openuserdialog" />';
element.after($compile(btn)(scope));
}
});
},
controllerAs: 'userSearch'
};
};
Содержание отредактирован -
Цель состоит в том, чтобы создать директиву, которая может быть прикреплена к текстовому полю, что, когда текстовое поле имеет фокус,/кнопка появится изображение после текстовое поле и событие click/image/button будут запускать функцию, содержащуюся в директиве. Цель состоит в том, чтобы эта функциональность была полностью автономной в директиве, поэтому ее можно легко развернуть на многих страницах или в приложениях.
Изображение/кнопка появляется после текстового поля без проблем, но событие нажатия кнопки не запускает функцию. Я создал plunkr с примером кода.
В строке, строка 15 определяет функцию, называемую «поиск», которая ничего не делает, кроме как вызвать предупреждение. Когда текстовое поле имеет фокус, кнопка отображается как ожидалось, а строка 34 успешно вызывает функцию поиска, что означает, что сама функция работает. Однако событие нажатия кнопки не запускает функцию поиска.
Любая помощь была бы принята с благодарностью!
Оригинальное сообщение:
Я довольно новый для угловых и был бы признателен за некоторые рекомендации. Я пытаюсь воссоздать некоторые функции в наших приложениях, которые в настоящее время выполняются с помощью jQuery. Функциональность включает в себя прикрепление псевдокласса к текстовому поле, которое затем подбирается jQuery, и изображение увеличительного стекла вводится в DOM сразу после текстового поля. При нажатии на изображение открывается диалоговое окно.
Что я до сих пор делал, это простая html-страница, простой контроллер и простая директива. Когда текстовое поле имеет фокус, изображение выглядит так, как ожидалось. Однако директива ng-click не срабатывает.
Вот HTML:
<input
id="txtAlias"
type="text"
ng-model="pc.results"
user-search />
</div>
Вот контроллер:
angular
.module('app')
.controller('PeopleController', PeopleController);
PeopleController.$inject = ['$http'];
function PeopleController() {
var pc = this;
pc.results = '';
pc.search = function() {
alert('test');
};
}
И это директива:
angular
.module('app')
.directive('userSearch', userSearch);
function userSearch($compile) {
return {
restrict: 'EAC',
require: 'ngModel',
//transclude: true,
scope: {
//search : function(callerid){
// alert(callerid);
//}
},
template: "The user's alias is: <b><span ng-bind='pc.results'></span>.",
//controller: UserSearchController,
link: function (scope, element, attrs) {
element.bind('focus', function() {
//alert(attrs.id + ' || ' + attrs.userSearch);
var nextElement = element.parent().find('.openuserdialog').length;
if (nextElement == 0) {
var magnifyingglass = $compile('<img src="' + homePath + 'Images/zoomHS.png" ' +
'alt="User Search" ' +
'ng-click="pc.search("' + attrs.id + '")" ' +
'class="openuserdialog">')(scope);
element.after(magnifyingglass);
}
});
}
};
};
В настоящее время, я бы счастлив получить предупреждение о стрельбе, либо нажав pc.search в контроллере, либо выполнив поиск в изоляции . До сих пор ни одна из них не работала. Я уверен, что это что-то простое, чего не хватает, но я не могу понять, что. Любая помощь будет оценена.
Если значок увеличительного стекла всегда есть, почему бы просто не сделать его частью шаблона директивы, вместо того, чтобы вставлять его сразу после? – Dave
@ Давай, он не всегда будет там. Предполагается, что разработчик сможет добавить директиву пользовательского поиска в любое текстовое поле, которое может потребовать функции поиска. – johneasley
Ах, и потому, что это texbox, вам нужно поставить увеличительное стекло за его пределы. Рассматривали ли вы создание директивы, которая всегда отображает texbox, и условно отображает увеличительное стекло, если присутствует атрибут пользовательского поиска? – Dave