【发布时间】:2018-09-24 01:39:00
【问题描述】:
我是 Bootstrap 的新手,并尝试在用户单击链接时从 Angular 控制器中的 Javascript 激活 .collapse() 函数。当单击其中一个链接时,这应该会关闭可折叠导航栏(因为路由由 Angular 控制,不会导致页面刷新)。
以下错误显示:
ERROR TypeError: $(...).collapse is not a function
at HTMLAnchorElement.<anonymous> (header.component.ts:18)
at HTMLAnchorElement.dispatch (jquery.js:5183)
at HTMLAnchorElement.elemData.handle (jquery.js:4991)
at ZoneDelegate.webpackJsonp../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:421)
at Object.onInvokeTask (core.js:4740)
at ZoneDelegate.webpackJsonp../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:420)
at Zone.webpackJsonp../node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:188)
at ZoneTask.webpackJsonp../node_modules/zone.js/dist/zone.js.ZoneTask.invokeTask [as invoke] (zone.js:496)
at invokeTask (zone.js:1540)
at HTMLAnchorElement.globalZoneAwareCallback (zone.js:1577)
HTML模板的相关部分:
<div class='collapse navbar-collapse' id='mainNavbar'>
<div class='navbar-nav'>
<div [ngClass]='{ "nav-item": true, active: pageTitle === "Home" }'>
<a class='nav-link' routerLink='/'>Home</a>
</div>
<div [ngClass]='{ "nav-item": true, active: pageTitle === "Request" }'>
<a class='nav-link' routerLink='/request'>Request</a>
</div>
<div [ngClass]='{ "nav-item": true, active: pageTitle === "Volunteer" }'>
<a class='nav-link' routerLink='/volunteer'>Volunteer</a>
</div>
<div [ngClass]='{ "nav-item": true, active: pageTitle === "About" }'>
<a class='nav-link' routerLink='/about'>About</a>
</div>
</div>
</div>
控制器的相关部分:
// importing jquery from npm module
import * as $ from 'jquery';
// inside the controller class
ngOnInit() {
$('.nav-link').click(() => $('.collapse').collapse('toggle'));
}
包含的脚本(.angular-cli.json):
"scripts": [
"../node_modules/jquery/dist/jquery.min.js",
"../node_modules/popper.js/dist/umd/popper.min.js",
"../node_modules/bootstrap/dist/js/bootstrap.min.js"
]
我见过多个这样的问题,但几乎总是答案说要确保 jQuery 在 Bootstrap 之前包含,并且 Bootstrap 不包含两次。这里也不是。
其他 jQuery 功能(正常折叠功能)工作正常。如果我尝试在下拉菜单上使用 .dropdown() 函数,也会出现同样的错误。
这里有什么问题?
如果您需要:Angular 5、Bootstrap v4.0.0(npm 模块)、jQuery v3.3.1(npm 模块)
【问题讨论】:
-
嗯。为什么这立即被否决?我是不是不够彻底?
-
添加js文件后是否重启
ng serve? -
@David 是的,我做到了。
-
如果你尝试
declare let $: any而不是你的导入呢? -
我假设如果你将jquery 导入为$,这意味着$ 将只包含jquery 包中定义的代码,而不包含bootstrap 声明的附加插件。如果你使用declare let ...,那么$代表普通的jQuery函数加上额外的插件
标签: javascript jquery angular twitter-bootstrap bootstrap-4