SPFx - функция JavaScript не работает

У меня есть компонент слайда, собранный в моем методе render() в моей веб-части, он отображается нормально, но действие Javascript "ShowSlide()", необходимое для активации слайда, не запускается внутри $().ready()

Я поместил звонок внутри

public render(): void {  
  this.domElement.innerHTML = `
      <!-- build the slide here -->
      <div>
         <ul>
            .....
            ..... shortened for brevity 
            .....
         </ul>
      </div>
      <!-- CALL THE SLIDE using $().ready() - it doesn't work -->
      <script type="text/javascript">
        $(document).ready( function() 
            ShowSlide();
        });
      </script>
  `;
} 

У меня закончились идеи, я не знаю, что мешает запуску функции, я добавил маленькую кнопку для вызова этой функции вручную, и она работает, когда она вызывается нажатием кнопки, но не на ожидаемую $().ready()

public render(): void {  
  this.domElement.innerHTML = `
      <!-- manual call for ShowSlide() -- it works when clicked! -->
      <input type="button" value="Start Slide" onClick="ShowSlide()"  />
      <!-- build the slide here -->
      <div>
         <ul>
            .....
            ..... shortened for brevity 
            .....
         </ul>
      </div>
      <!-- CALL THE SLIDE using $().ready() - it doesn't work -->
      <script type="text/javascript">
        $(document).ready( function()
            ShowSlide();
        });
      </script>
  `;
} 

1 ответ

Решение

Я нашел решение для моей проблемы! Я узнал о добавлении скрипта, создав элемент внутри HEAD, поэтому все, что мне нужно было сделать, это следующее:

  public render(): void {

    this.domElement.innerHTML = this.htmlContents;

    let head: any = document.getElementsByTagName("head")[0] || document.documentElement,
    script = document.createElement("script");
    script.type = "text/javascript";

    try {
        script.appendChild(document.createTextNode(this.htmlScript));
    } 
    catch (e) {
        script.text = this.htmlScript;
    }

    head.insertBefore(script, head.firstChild);
    head.removeChild(script);               
  }

Я надеюсь, что это поможет любому, кто сталкивается с той же проблемой, занимало у меня 4 дня подряд на изучение, поиск в Google, чтение всего, что я мог, пока я не нашел статью в блоге о вызове функций Azure в SPFx, откуда я мог получить вдохновение для подключения очки и решить мою проблему!

Другие вопросы по тегам