Làm cách nào để đưa tệp script JavaScript vào Angular và gọi một hàm từ script đó?


119

Tôi có một tệp JavaScript được gọi là abc.jscó chức năng 'công khai' được gọi xyz(). Tôi muốn gọi hàm đó trong dự án Angular của mình. Làm thế nào để làm điều đó?

Câu trả lời:


105

Tham khảo các tập lệnh bên trong tệp angular-cli.json( angular.jsonkhi sử dụng góc 6+).

"scripts": [
    "../path" 
 ];

sau đó thêm vào typings.d.ts(tạo tệp này trong srcnếu nó chưa tồn tại)

declare var variableName:any;

Nhập nó vào tệp của bạn dưới dạng

import * as variable from 'variableName';

9
tôi đã thêm đường dẫn trong script là "scripts": ["./assets/common_header_sidebar.js"]; sau đó trong gõ.d.ts tôi đã viết khai báo var commonHeader: any; và sau đó trong tệp ts của tôi, tôi đã viết import * dưới dạng commonHeaderModule từ 'commonHeader'; nhưng nhận được "Không thể tìm thấy mô-đun 'commonHeader'." lỗi
Piyush Jain

6
tôi nghe có vẻ ngớ ngẩn khi hỏi điều này. nhưng tên tệp trong đường dẫn (khai báo trong angle-cli.json) và khai báo tên đối tượng trong tệp gõ.d.ts có liên quan như thế nào. kể từ khi tôi đang nhập khẩu từ tên của đối tượng tuyên bố không phải là tập tin
Piyush Jain

2
bạn có thể tạo một plunkerđể tái tạo
Aravind

2
được thực hiện với việc tích hợp chỉ là tôi phải khai báo hàm trong tệp ts của mình nơi tôi đang sử dụng nó và không cần nhập. Cảm ơn rất nhiều.
Piyush Jain

2
@Aravind điều gì xảy ra nếu tôi không có tệp gõ.d.ts trong dự án Angular 4 của mình?
Habib

33

Để bao gồm một thư viện toàn cục, ví dụ: jquery.jstệp trong mảng tập lệnh từ angular-cli.json( angular.jsonkhi sử dụng góc 6+):

"scripts": [
  "../node_modules/jquery/dist/jquery.js"
]

Sau đó, khởi động lại phục vụ nếu nó đã được bắt đầu.


3
làm thế nào để bạn nhập vào tệp bản ghi?
alansiqueira27

1
để nhập khẩu ts sử dụng tập tin -declare var $: any;
ojus Kulkarni

3
Tệp angle-cli.json đã được đổi tên / thay thế bằng angle.json trong phiên bản 6+ của Angular.
Ε Г И І И О

22

Thêm tệp js bên ngoài vào index.html .

<script src="./assets/vendors/myjs.js"></script>

Đây là tệp myjs.js :

var myExtObject = (function() {

    return {
      func1: function() {
        alert('function 1 called');
      },
      func2: function() {
        alert('function 2 called');
      }
    }

})(myExtObject||{})


var webGlObject = (function() { 
    return { 
      init: function() { 
        alert('webGlObject initialized');
      } 
    } 
})(webGlObject||{})

Sau đó khai báo nó trong thành phần như dưới đây

demo.component.ts

declare var myExtObject: any;
declare var webGlObject: any;

constructor(){
    webGlObject.init();
}

callFunction1() {
    myExtObject.func1();
}

callFunction2() {
    myExtObject.func2();
}

demo.component.html

<div>
    <p>click below buttons for function call</p>
    <button (click)="callFunction1()">Call Function 1</button>
    <button (click)="callFunction2()">Call Function 2</button>
</div>

Nó làm việc cho tôi ...


Cảm ơn ví dụ rất kỹ lưỡng, nó đã làm việc cho tôi trên góc 6. Không có câu trả lời nào khác hoạt động.
Daniel Filipe

Fwiw, đây là một số giải thích về những gì declarekhông - về cơ bản " declaređược sử dụng để nói nguyên cảo rằng biến đã được tạo ra ở những nơi khác " (từ câu trả lời này ).
ruffin

18

Bạn có thể

import * as abc from './abc';
abc.xyz();

hoặc là

import { xyz } from './abc';
xyz()

26
tôi phải làm gì khi tệp được lưu trữ ở đâu đó nhưng không phải trong kho lưu trữ cục bộ?
Piyush Jain

Bạn có hình dung điều này?
Luis Aceituno

Gặp lỗi trong cả hai phương pháp. Tôi có một tệp .js trong dự án của mình nhưng khi tôi nhập bằng phương pháp đầu tiên, nó khiến tôi gặp lỗi khi biên dịch và không thể tìm thấy bất kỳ mô-đun nào khi tôi sử dụng phương pháp thứ hai. Và tôi chỉ đang sử dụng thanh trượt trơn.
Habib
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.