javascript - 如何在不同的组件上使用 jQuery(Angular CLI)
问题描述
我有两个不同的页面(主页、主页面),但是当路由、外部 CSS(Materialize)和其他一切正常时,我无法在它们的 component.ts 文件中初始化 javascript。
例如,这是我的 home.component.ts 文件,用于简单的可折叠
import { Component, OnInit } from '@angular/core';
declare let $: any;
@Component({
selector: 'app-home',
templateUrl: 'home.component.html',
styleUrls: ['home.component.css']})
export class HomeComponent implements OnInit {
title = 'untitled3';
ngOnInit() { $(document).ready(function() {
$('.collapsible').collapsible();
});
}}
还有 home.component.html 文件
<ul class="collapsible">
<li>
<div class="collapsible-header"><i class="material-icons">filter_drama</i>First</div>
<div class="collapsible-body"><span>test</span></div>
</li>
<li>
<div class="collapsible-header"><i class="material-icons">place</i>Second</div>
<div class="collapsible-body"><span>test</span></div>
</li>
<li>
<div class="collapsible-header"><i class="material-icons">whatshot</i>Third</div>
<div class="collapsible-body"><span>test.</span></div>
</li>
</ul>
索引.html
<html>
<head>
<meta charset="utf-8">
<title>Untitled3</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</head>
<body>
<script src="/node_modules/materialize-css/dist/js/materialize.min.js"></script>
<script src="/node_modules/popper.js/dist/popper.min.js"></script>
<script src="/node_modules/hammerjs/hammer.min.js"></script>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<app-root></app-root>
</body>
</html>
并在 angular.json 文件中
...
"styles": [
"src/styles.css",
"node_modules/materialize-css/dist/css/materialize.css"
],
"scripts": ["node_modules/jquery/dist/jquery.js",
"node_modules/materialize-css/dist/js/materialize.js",
"node_modules/popper.js/dist/popper.min.js",
"node_modules/hammerjs/hammer.min.js"]
...
当我只使用 app.component 文件时不会发生这种情况,那么如何在特定页面中运行脚本?
解决方案
我最初建议您在尝试在函数 ngOnInit 中使用 document.ready 函数时仔细阅读 Angular 的文档 - 这已经表示组件的加载。有关生命周期函数的更多信息将有所帮助。
接下来回答您的问题 - 要使用 JQuery,Angular 中有多种方法。最好的方法是使用 npm 安装它,然后导入它。
npm install jquery --save
要导入:
import * as $ from 'jquery';
然后你可以像在 jquery 中一样使用 $ 。但是,请正确理解角度文档。通常建议在 Angular 中避免使用 jquery,因为 Angular 通常内置了所有功能。
您可以在此参考中找到有关该解决方案的更多详细信息
推荐阅读
- r - 在很长一段时间内绘制值时,日期会乱序填充
- gis - 为什么多边形不显示在地图上?
- vba - 搜索特定格式的字符串;在文件名中并将其分配给变量
- python - 在 Azure 函数中使用自己的包(工件)?
- r - 将年度插值到每月,然后将长数据更改为宽数据,R
- java - Java将泛型与另一个类的Comparable进行比较
- ruby-on-rails - 带有字符串键的哈希的葡萄实体不起作用
- javascript - 寻找优雅/简洁的方式在 JavaScript 中构建哈希表(即频率)
- mysql - MYSQL:: 条件不起作用的存储过程
- awk - 需要 Kornshell 和 sed 解释