Я получаю следующую ошибку при вызове имени метода из внешнего файла с помощью Angular4.
Ошибка:
ERROR in src/app/about/about.component.ts(22,9): error TS2304: Cannot find name 'checkJS'.
Я предоставляю свой код ниже.
about.componet.html:
<ul class = "nav navbar-nav">
<li class = "active"><a routerLink ='/'>Home</a></li>
<li class = "active"><a [routerLink] = "['/about', 'http://example.com/jslib/jslib.js']" routerLinkActive = "active">About</a></li>
</ul>
Здесь я передаю путь к внешнему файлу в URL.
about.componet.ts:
import { Component, OnInit,AfterViewChecked } from '@angular/core';
import {Http,Response,Headers} from '@angular/http';
import {ActivatedRoute} from '@angular/router';
import {Router} from '@angular/router';
import 'rxjs/add/operator/toPromise';
declare var jquery:any;
declare var $ :any;
@Component({
selector: 'app-about',
templateUrl: './about.component.html',
styleUrls: ['./about.component.css']
})
export class AboutComponent implements OnInit {
private headers = new Headers({'Content-Type':'application/json'});
aboutData = [];
filePath:string;
constructor(private router:Router,private route:ActivatedRoute,private http:Http) { }
ngAfterViewChecked() {
$('#title').attr('style','font-weight:bold');
$.getScript(this.filePath,function(){
setTimeout(function(){
checkJS();
}, 5000);
})
}
ngOnInit() {
this.route.params.subscribe(params=>{
this.filePath = params['filepath'];
});
this.http.get('http://localhost:3000/articles').subscribe(
(res:Response)=>{
this.aboutData = res.json();
}
)
}
}
Вот мой внешний код файла .js.
var script = document.createElement("SCRIPT");
script.setAttribute("type", "text/javascript");
script.setAttribute("src", "https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js");
document.getElementsByTagName("head")[0].appendChild(script);
window.onload = function () {
if (typeof (jQuery) != "undefined") {
checkJS();
}
}
function checkJS(){
$('#title').html('LOADED CONTENT FROM REMOTE FILE');
}
Я вызываю эту функцию (i.e-checkJS) из этого внешнего файла .js, который приведен выше, но получаю ошибку во время компиляции кода.
Я выложил весь машинописный код. Пожалуйста, проверь это.
Вам действительно все равно нужно добавить это объявление внешнего файла в файл angular-cli.json, а затем импортировать его вручную. Вот как я связываю jQuery всякий раз, когда мне это нужно. Вы также можете обратиться к этому ответу (аналогичный вопрос) stackoverflow.com/a/44817445/7950729
Попробуйте получить доступ к checkJS () из консоли браузера. Если он доступен, попробуйте объявить его, например, declare let checkJS: any.
@NiralMunjariya: Я не понял твоей точки зрения.



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


Вы должны объявить функцию вручную вне класса, чтобы TypeScript знал, что она существует:
declare function checkJS();
Ваш файл должен выглядеть так:
import { Component, OnInit,AfterViewChecked } from '@angular/core';
import {Http,Response,Headers} from '@angular/http';
import {ActivatedRoute} from '@angular/router';
import {Router} from '@angular/router';
import 'rxjs/add/operator/toPromise';
declare var jquery:any;
declare var $ :any;
declare function checkJS();
@Component({
selector: 'app-about',
templateUrl: './about.component.html',
styleUrls: ['./about.component.css']
})
export class AboutComponent implements OnInit {
private headers = new Headers({'Content-Type':'application/json'});
aboutData = [];
filePath:string;
constructor(private router:Router,private
route:ActivatedRoute,private http:Http) { }
ngAfterViewChecked() {
$('#title').attr('style','font-weight:bold');
$.getScript(this.filePath,function(){
setTimeout(function(){
checkJS();
}, 5000);
})
}
ngOnInit() {
this.route.params.subscribe(params=>{
this.filePath = params['filepath'];
});
this.http.get('http://localhost:3000/articles').subscribe(
(res:Response)=>{
this.aboutData = res.json();
}
)
}
}
Взгляните на строку 8.
В declare снова отображается ошибка. i.e- Modifier can not be appear here .
Вы должны объявить функцию вне класса компонентов, например. в конце файла
Собственно не достал, где буду менять.
Вы включили этот сценарий в свой
angular-cli.json?