Angular'a bir JavaScript komut dosyasını nasıl eklerim ve bu komut dosyasından bir işlevi nasıl çağırırım?


119

abc.js"Genel" adında bir işlevi olan bir JavaScript dosyam var xyz(). Angular projemde bu işlevi çağırmak istiyorum. Bunu nasıl yaparım?

Yanıtlar:


105

angular-cli.json( angular.jsonAçısal 6+ kullanırken) dosyanın içindeki komut dosyalarına bakın .

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

sonra ekleyin typings.d.ts( srchalihazırda yoksa bu dosyayı içinde oluşturun )

declare var variableName:any;

Dosyanıza şu şekilde aktarın:

import * as variable from 'variableName';

9
komut dosyalarına yolu "komut dosyaları" olarak ekledim: ["./assets/common_header_sidebar.js"]; sonra typing.d.ts içinde declare var commonHeader yazdım: any; ve sonra ts dosyama 'commonHeader'dan commonHeaderModule olarak import * yazdım; ancak "'commonHeader' modülü bulunamıyor." hata
Piyush Jain

6
Bunu sorduğum için aptalca gelebilirim. ancak yoldaki dosya adının (açısal-cli.json olarak bildirilmiştir) ve typing.d.ts dosyasında nesnenin adının bildirilmesinin nasıl ilişkili olduğu. Dosyadan değil beyan edilen nesnenin adından içe aktarıyorum
Piyush Jain

2
plunkeryeniden üretmek için bir yaratabilir misin
Aravind

2
entegrasyon ile yapıldı, sadece işlevi kullandığım ts dosyamda bildirmek zorunda kaldım ve içe aktarmaya gerek yoktu. Çok teşekkürler.
Piyush Jain

2
@Aravind Angular 4 projemde typing.d.ts dosyası yoksa ne olur?
Habib

33

Global bir kitaplık eklemek için, örneğin jquery.jskomut dizisindeki dosya angular-cli.json( angular.jsonaçısal 6+ kullanılırken):

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

Bundan sonra, zaten başlamışsa servisi yeniden başlatın.


3
typcript dosyasına nasıl aktarılır?
alansiqueira27

1
ts dosyası kullanımında içe aktarmak için -declare var $: any;
ojus kulkarni

3
angular-cli.json dosyası Angular'ın 6+ sürümünde angular.json ile yeniden adlandırıldı / değiştirildi.
Ε Г И І И О

22

Dış js dosya ekle index.html .

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

İşte myjs.js dosyası:

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||{})

Sonra aşağıdaki gibi bileşen içinde olduğunu beyan edin

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>

Benim için çalışıyor ...


Çok kapsamlı bir örnek, teşekkürler, benim için açısal 6 üzerinde çalıştı. Diğer cevapların hiçbiri işe yaramadı.
Daniel Filipe

FWIW, burada bazı açıklamalar ne declareyapar - aslında " declaredeğişken başka bir yerde oluşturulduğunu typescript anlatmak için kullanılır (dan" Bu yanıt ).
ruffin

18

Sen de yapabilirsin

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

veya

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

26
dosya bir yerde barındırılıyorsa, ancak yerel depoda yoksa ne yapmalıyım?
Piyush Jain

bunu çözdün mü?
Luis Aceituno

Her iki yöntemde de hata almak. Pekala, projemde bir .js dosyam var ama ilk yöntemle içe aktardığımda derlemede hata veriyor ve ikinci yöntemi kullandığımda herhangi bir modül bulamıyorum. Ve ben sadece kaygan kaydırıcı kullanıyorum.
Habib
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.