Вызов пользовательской функции jQuery внутри класса Angular Component

У меня есть одна пользовательская функция запроса, написанная в файле 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?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
1 500
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать <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

Он показывает ERROR TypeError: $(...).inlineEdit is not a function

55SK55 10.06.2019 11:25

Вы импортировали свой файл inlineedit.js в раздел scripts файла angular.json? А вы установили jquery и тоже импортировали?

Harun Yilmaz 10.06.2019 11:32

Да, я все это делал. Но все еще сталкивается с той же проблемой. Где мне создать файл typings.d.ts?

55SK55 10.06.2019 11:55

Вы создаете файл (вы можете указать любое имя) по нужному пути и импортируете его в tsconfig.json файл в src место. Проверьте эту тему: stackoverflow.com/questions/51876748/…

Harun Yilmaz 10.06.2019 12:00

Теперь все работает нормально, кроме сигнатуры функции. interface JQuery { inlineEdit(options?: any): any; }. Здесь допускается только один параметр. Как я могу написать это для моей функции jQuery, которая принимает 2 параметра?

55SK55 10.06.2019 12:14

Вы можете добавить в декларацию столько параметров, сколько хотите. interface JQuery { inlineEdit(replaceWith: any, connectWith: any): any; }

Harun Yilmaz 10.06.2019 12:37

Другие вопросы по теме