Как использовать Google Transliterate в угловых 6? - PullRequest
0 голосов
/ 07 ноября 2018

Я использовал приведенный ниже код. это работает в index.html

<script type="text/javascript" src="https://www.google.com/jsapi"></script>

<script type="text/javascript">
    // Load the Google Transliterate API
    google.load("elements", "1", {
      packages: "transliteration"
    });

    function onLoad() {
      if (google.elements.transliteration.isBrowserCompatible()) {
        var options = {
          sourceLanguage: google.elements.transliteration.LanguageCode.ENGLISH,
          destinationLanguage: [google.elements.transliteration.LanguageCode.SINHALESE],
          shortcutKey: 'ctrl+g',
          transliterationEnabled: true
        };

        // Create an instance on TransliterationControl with the required
        // options.
        var control =
          new google.elements.transliteration.TransliterationControl(options);

        // Enable transliteration in the textbox with id
        // 'transliterateTextarea'.
        control.makeTransliteratable(['transliterateTextarea']);
      } else {
        document.getElementById('errorDiv').innerHTML = 'Sorry! Your browser does not support transliteration';
      }
    }

    google.setOnLoadCallback(onLoad);

  </script>

после изменения над этим кодом.

Ts Компонент

import { Component, OnInit } from '@angular/core';  
declare var google:any; 

@ Компонент ({
селектор: «app-root»,
templateUrl: './ app.component.html',
styleUrls: ['./app.component.css'] })

export class AppComponent implements OnInit {   
 title = 'translate';  
 public sinhalaText: string;   

 constructor() { 
         google.load('elements','1', { packages: 'transliteration'});
         google.setOnLoadCallback(this.onLoad);     
 }

 ngOnInit() {}



onLoad() {
     const sinhalOptions = {
       sourceLanguage:
         google.elements.transliteration.LanguageCode.ENGLISH,
       destinationLanguage:
         [google.elements.transliteration.LanguageCode.SINHALESE],
       shortcutKey: 'ctrl+s',
       transliterationEnabled: true
     };
     const tamilOptions = {
       sourceLanguage:
         google.elements.transliteration.LanguageCode.ENGLISH,
       destinationLanguage:
         [google.elements.transliteration.LanguageCode.TAMIL],
       shortcutKey: 'ctrl+t',
       transliterationEnabled: true
     };
     const sinhalaControl = new google.elements.transliteration.TransliterationControl(sinhalOptions);
     const elements = document.getElementsByClassName('sinhalaText');>         sinhalaControl.makeTransliteratable(elements);
     // const sinhalaControl = new google.elements.transliteration.TransliterationControl(sinhalOptions);
     // sinhalaControl.makeTransliteratable(this.sinhalaText);   
    }



 }

HTML-компонент

<textarea [(ngModel)]="sinhalaText" id="sinhalaText" style="width:600px;height:200px"></textarea>

index.html

<body>
  <app-root></app-root>
  <script type="text/javascript" src="https://www.google.com/jsapi"></script>
</body>

Это не работает.

Этот код работает на файл index.html в угловом формате. но я прошу, чтобы код был встроен внутрь компонента в угловом приложении. как это сделать?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Я просто публикую полный компонент как ответ

export class HomeComponent implements OnInit {
model = {
    left: true,
    middle: false,
    right: false
};
sinhalaText:"string"
focus;
focus1;
constructor() { }

ngOnInit() {}

@ViewChild('sinhalaTextInput') sinhalaTextInput: ElementRef;
ngAfterViewInit() {
    google.load("elements", "1", {
        packages: "transliteration"
      });   

google.setOnLoadCallback(() => this.onLoad()); // Don't lose "this" context 
}

private onLoad() {
const elements = this.sinhalaTextInput.nativeElement;
var options = {
    sourceLanguage:
        google.elements.transliteration.LanguageCode.ENGLISH,
    destinationLanguage:
        [google.elements.transliteration.LanguageCode.TAMIL],
    shortcutKey: 'ctrl+g',
    transliterationEnabled: true
};

// Create an instance on TransliterationControl with the required
// options.
var control =
    new google.elements.transliteration.TransliterationControl(options);

// Enable transliteration in the textbox with id
// 'transliterateTextarea'.
control.makeTransliteratable([elements]);

}


}
0 голосов
/ 07 ноября 2018

Пожалуйста, используйте хорошую функцию livecyle: AfterViewInit ожидающий HTML включен в DOM.

В TS

@ViewChild('sinhalaTextInput') sinhalaTextInput: ElementRef;

ngAfterViewInit() {
    ...
    google.setOnLoadCallback(() => this.onLoad()); // Don't lose "this" context 
}

private onLoad() {
    ...
    const elements = this.sinhalaTextInput.nativeElement;
    ...
}

В HTML

<textarea #sinhalaTextInput [(ngModel)]="sinhalaText" id="sinhalaText" style="width:600px;height:200px"></textarea>
...