У меня есть одна пользовательская функция запроса, написанная в файле javascript в исходной папке (т.е. /src/assets/inlineedit.js) приложения Angular.
Вот содержимое файла.
$.fn.inlineEdit = function(replaceWith, connectWith) {
$(this).hover(function() {
$(this).addClass('hover');
}, function() {
$(this).removeClass('hover');
});
$(this).click(function() {
var elem = $(this);
elem.hide();
elem.after(replaceWith);
replaceWith.focus();
replaceWith.blur(function() {
if ($(this).val() != "") {
connectWith.val($(this).val()).change();
elem.text($(this).val());
}
$(this).remove();
elem.show();
});
});
};
Теперь я хочу вызвать эту функцию в файле Angular mycomponent.ts, и содержимое выглядит следующим образом:
import { Component, ViewChild, ElementRef } from '@angular/core';
@Component({
selector: 'app-pivotgrid',
templateUrl: './mycomponent.component.html',
styleUrls: ['./mycomponent.component.css']
})
export class mycomponent {
OnCellclick (event): void
{
var replaceWith = $('<input name = "temp" type = "text" />'),
connectWith = $('input[name = "hiddenField"]');
$('#innerDiv').inlineEdit(replaceWith, connectWith);
}
}
Но я получаю сообщение об ошибке, например
Property 'inlineEdit' does not exist on type 'JQuery'
Как вызывать функции jQuery внутри компонентов Angular?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать <any> приведение типов следующим образом:
(<any>$('#innerDiv')).inlineEdit(replaceWith, connectWith);
Или еще лучше:
Первая установка @types/jquery из npm
npm install @types/jquery --save-dev
Затем добавьте локальный файл типов и объявите в нем функцию вашего плагина.
interface JQuery {
<your-plugin-name>(options?: any): any;
}
Затем вы можете использовать свой плагин.
Источник: https://medium.com/all-is-web/angular-5-using-jquery-plugins-5edf4e642969
Вы импортировали свой файл inlineedit.js в раздел scripts файла angular.json? А вы установили jquery и тоже импортировали?
Да, я все это делал. Но все еще сталкивается с той же проблемой. Где мне создать файл typings.d.ts?
Вы создаете файл (вы можете указать любое имя) по нужному пути и импортируете его в tsconfig.json файл в src место. Проверьте эту тему: stackoverflow.com/questions/51876748/…
Теперь все работает нормально, кроме сигнатуры функции. interface JQuery { inlineEdit(options?: any): any; }. Здесь допускается только один параметр. Как я могу написать это для моей функции jQuery, которая принимает 2 параметра?
Вы можете добавить в декларацию столько параметров, сколько хотите. interface JQuery { inlineEdit(replaceWith: any, connectWith: any): any; }
Он показывает
ERROR TypeError: $(...).inlineEdit is not a function