延迟加载JavaScript文件

时间:2015-10-16 作者:wsfuller

我需要延迟AngularJS脚本的运行,以便可以首先设置我的应用程序。我需要用ng app=“app”初始化应用程序。我想将该属性添加到< body >

<;正文ng app=“app”></正文>

 wp_enqueue_script(\'plugin-setup\', plugin_dir_url( __FILE__ ).\'js/plugin-setup.js\', array(\'jquery\'), null, true);

plugin-set.js

document.addEventListener("DOMContentLoaded", function(event) {
  document.getElementsByTagName("body")[0].setAttribute("ng-app", "app");
});
设置完成后,我可以运行角度脚本:

class pluginClass{

function pluginInit(){
    add_action( \'wp_enqueue_scripts\', array( $this, \'scriptThings\' ) );
}

function scriptThings(){
    wp_enqueue_script(\'angular-core\', plugin_dir_url( __FILE__ ).\'js/vendor/angular/angular.js\', array(\'jquery\'), null, true);
    wp_enqueue_script(\'angular-resource\', plugin_dir_url( __FILE__ ).\'js/vendor/angular-resource/angular-resource.js\', array(\'jquery\'), null, true);
    wp_enqueue_script(\'app\', plugin_dir_url( __FILE__ ).\'js/app.js\', array(), null, true);
    wp_enqueue_script(\'app-controller\', plugin_dir_url( __FILE__ ).\'js/controllers/app_controller.js\', array(), null, true);
    wp_enqueue_script(\'imagetile-factory\', plugin_dir_url( __FILE__ ).\'js/resource/imageTile_factory.js\', array(), null, true);
}

}

$my_class = new pluginClass;

add_action(\'init\', array($my_class, \'pluginInit\'));
有没有办法延迟角度脚本在我的plugin.php*?

2 个回复
SO网友:Robert hue

我想你应该用setTimeout 暂停脚本的执行而不阻塞UI。

setTimeout(function(){

  //your code to be executed after 2 seconds

}, 2000);
因此,您的代码将成为。

setTimeout(function(){

    document.addEventListener("DOMContentLoaded", function(event) {
      document.getElementsByTagName("body")[0].setAttribute("ng-app", "app");
    });    

}, 2000);
这将延迟脚本执行2秒。您可以根据需要更改此值。

再想一想,我想如果在初始化应用程序之前检查当前页面中是否加载了AngularJS会更好。

function checkAngular() {
  if ( window.angular ) {

    // your code to be executed
    document.addEventListener("DOMContentLoaded", function(event) {
      document.getElementsByTagName("body")[0].setAttribute("ng-app", "app");
    });    

  } else {
    window.setTimeout( checkAngular, 1000 );
  }
}
checkAngular();
那么这段代码做什么呢?它检查AngularJS是否已成功加载。如果AngularJS已初始化,则它将执行代码,否则将延迟1秒并再次检查,直到加载AngularJS。

SO网友:Gareth Gillman

将操作更改为:

add_action(\'init\', array($my_class, \'pluginInit\',\'40\'));
这会告诉操作稍后在队列中运行,您还可以使用wp_script_is e、 g。

 $handle = \'plugin-setup.js\';
 $list = \'enqueued\';
 if (wp_script_is( $handle, $list )) {
  // enqueue scripts here
 }
希望这能为你指明正确的方向