Вызов функции javascript, зарегистрированной с использованием c# из машинописного текста - PullRequest
0 голосов
/ 06 мая 2020

Я добавил вызов функции из C# с использованием RegisterStartupScript следующим образом:

Page.ClientScript.RegisterStartupScript(this.GetType(), "PrintWindowJScript", "<script type=\"text/javascript\">OpenNewWindow() { Reports_OpenWindowNamed(URL, 350, 250, \"PrintAttachPopupWindow\"); }</script>");

Приведенный выше код добавит его в DOM, поэтому, когда я вызываю OpenNewWindow (), он должен вызывать функцию из моего компонента angular.

Теперь в моем компоненте angular у меня есть функция изменения раскрывающегося списка в Typescript (Angular). Мне нужно вызвать OpenNewWindow () отсюда, как указано ниже.

interface IMyWindow {
  OpenNewWindow: Function;
}
declare var v_MyWindow: IMyWindow ;

export class MyComponent implements OnInit {

  ngOnInit() {
  }

  attachChange(attachDropDown: any) {
    if(attachDropDown.value && attachDropDown.value.id == "MyValue"){
      v_MyWindow.OpenNewWindow();
    }
  }
}

Приведенный выше код дает мне "v_MyWindow" как undefined.

Я пробовал ссылаться to это статья, но не работает.

Может ли кто-нибудь сообщить мне, если я что-то упустил? Что мне делать, чтобы вызвать функцию?

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Вы уже создали интерфейс и объявили переменную v_MyWindow, вам нужно только назначить свойство OpenNewWindow.

изменить:

Page.ClientScript.RegisterStartupScript(this.GetType(), "PrintWindowJScript", "<script type=\"text/javascript\">OpenNewWindow() { Reports_OpenWindowNamed(URL, 350, 250, \"PrintAttachPopupWindow\"); }</script>");

на:

Page.ClientScript.RegisterStartupScript(this.GetType(), "PrintWindowJScript", "<script type=\"text/javascript\">v_MyWindow.OpenNewWindow = function() { Reports_OpenWindowNamed(URL, 350, 250, \"PrintAttachPopupWindow\"); }</script>");
0 голосов
/ 06 мая 2020

где вы присваиваете значение v_MyWindow? Возможно, вы сначала захотите получить ссылку на собственный объект окна в Angular.

Подход к этому объясняется здесь: https://juristr.com/blog/2016/09/ng2-get-window-ref/

В основном вы определяете инъекционная оболочка вокруг импорта окна:

import { Injectable } from '@angular/core';

function _window(): any {
   // return the global native browser window object
   return window;
}

@Injectable()
export class WindowRef {
   get nativeWindow(): any {
      return _window();
   }
}

Затем вы импортируете ее в свое приложение следующим образом:

import { WindowRef } from './WindowRef';

@NgModule({
    ...
    providers: [ WindowRef ]
})
export class AppModule{}

Потребляйте вашу зависимость в вашем компоненте следующим образом:

export class MyComponent implements OnInit {
    constructor(
        private nativeWindow: WindowRef) { }

    ngOnInit(): void {
        console.debug('Native window inner width: ', this.nativeWindow.nativeWindow.innerHeight);
    }
}

Это должно дать вам такой вывод консоли: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...