Добавление плагина jQuery в приложение angular

Используемые фреймворки

  1. Угловой: 5.2.3
  2. Фонд(Зурб): 6.2.4

Создал угловое приложение, используя

> ng new foundation-plugin-app --style=sass
> cd foundation-plugin-app
> npm install foundation-sites --save

До этого все работало как положено.
Затем я добавил foundation-datepicker.

> npm install foundation-datepicker --save

Вот как инициализируется плагин.

$('#scenario_start_date').fdatepicker({
  initialDate: '02-12-1989',
  format: 'mm-dd-yyyy',
  disableDblClickSelection: true,
  leftArrow: '<<',
  rightArrow: '>>',
  closeIcon: 'X',
  closeButton: true
});

Теперь, чтобы заставить его работать, выполните следующие действия: 1.Добавил styleUrls в app.component.ts

styleUrls: [
    // ...,
    '../../node_modules/foundation-datepicker/scss/foundation-datepicker.scss'    ]

2.Добавлено scripts в angular-cli.json

"scripts": [
    "node_modules/foundation-datepicker/js/foundation-datepicker.js"
]

3.Добавлено typings в app.component.ts

npm install --save-dev @types/jquery

и импортировал jquery и foundation-datepicker плагин на страницу

import * as $ from 'jquery';
import 'foundation-datepicker';

4.Наконец, назвал плагин в ngOnInit() из app.component.ts

$('#scenario_start_date').fdatepicker(/*...*/);

Что дало ошибку как

fdatepicker не определено. Поэтому я набрал его как

(<any>$('#scenario_start_date')).fdatepicker(/*...*/);

чтобы подавить ошибку.

Это дает новую ошибку

Uncaught TypeError: невозможно прочитать свойство «fn» неопределенного

на eval (webpack-internal:///../../../../foundation-datepicker/js/foundation-datepicker.min.js:1)
на eval (webpack-internal:// /../../../../foundation-datepicker/js/foundation-datepicker.min.js:1)
в объекте.../../../../foundation-datepicker /js/foundation-datepicker.min.js (vendor.bundle.js:36)
в __ webpack_require __ (inline.bundle.js:55)
в eval (webpack-internal:///.. /../../../../src/app/app.component.ts:15)
в Object.../../../../../src/app/ app.component.ts (main.bundle.js:21)
в __ webpack_require __ (inline.bundle.js:55)
в eval (webpack-internal:///../../. ./../../src/app/app.module.ts:11)
в Object.../../../../../src/app/app.module.ts (main.bundle.js:29)
в __ webpack_require __ (inline.bundle.js:55)

Что я делаю не так с кодом? Любые указатели будут полезны.


person naveen    schedule 05.02.2018    source источник
comment
Я думаю, вы забыли включить JQuery.js в angular-cli.json.   -  person Abbas Amiri    schedule 05.02.2018
comment
@abbas amiri: нет. Он добавлен как зависимость. Фонду это нужно. Также $(#scenario_start_date) работает, когда я console.log его.   -  person naveen    schedule 05.02.2018
comment
ну, я сделал именно то, что вы сделали, за исключением того, что я добавил jquery, и это работает для меня.   -  person Abbas Amiri    schedule 05.02.2018


Ответы (1)


Ваше заявление об импорте кажется неправильным.

Пожалуйста, попробуйте import $ from 'jquery';

И убедитесь, что jQuery связан с вашим сгенерированным файлом пакета.

В вашем случае он либо не экспортируется глобально, либо не включен в контекст окна.

В этом случае попробуйте

window.jQuery = $;
window.$ = $;
person Daniel Ruf    schedule 25.02.2018
comment
Почему это не будет ответом? jQuery в его случае не определен, потому что его импорт неверен. - person Daniel Ruf; 26.02.2018
comment
Ваше решение не сработало для меня, но это решение сработало для меня stackoverflow.com/a/50020329/89605 - person burnt1ce; 16.01.2019
comment
Это связано с TypeScript и представляет собой другую проблему. - person Daniel Ruf; 16.01.2019