首页 > 解决方案 > 为什么在 Wordpress 插件中未检测到 Angular app-root?

问题描述

我正在开发一个需要在 Wordpress 插件中加载 Angular 的项目,并且遇到以下错误:

main-es5.js?ver=5.3.2:1 ERROR Error: The selector "app-root" did not match any elements
    at e.value (main-es5.js?ver=5.3.2:1)
    at yi (main-es5.js?ver=5.3.2:1)
    at ji (main-es5.js?ver=5.3.2:1)
    at Ni (main-es5.js?ver=5.3.2:1)
    at Object.Xi [as createRootView] (main-es5.js?ver=5.3.2:1)
    at t.value (main-es5.js?ver=5.3.2:1)
    at t.value (main-es5.js?ver=5.3.2:1)
    at e.value (main-es5.js?ver=5.3.2:1)
    at main-es5.js?ver=5.3.2:1
    at Array.forEach (<anonymous>)

插件代码:

<?php
/*
* Plugin Name: Example
* Description: description
* Version: 1.0
* Author: Some guy
* Author URI: www.website.com
* Test Domain: pluginname
*/

wp_register_script( 'example_main5_js', plugins_url('/hello-app/main-es5.js', __FILE__));
wp_register_script( 'example_main2015_js', plugins_url('/hello-app/main-es2015.js', __FILE__));
// wp_register_script( 'example_poly5_js', plugins_url('/hello-app/polyfills-es5.js', __FILE__));
// wp_register_script( 'example_poly2015_js', plugins_url('/hello-app/polyfills-es2015.js', __FILE__));
wp_register_script( 'example_run5_js', plugins_url('/hello-app/runtime-es5.js', __FILE__));
wp_register_script( 'example_run2015_js', plugins_url('/hello-app/runtime-es2015.js', __FILE__));


function example_enqueue_script() {
  wp_enqueue_script('example_main5_js');
  wp_enqueue_script('example_main2015_js');
  // wp_enqueue_script('example_poly5_js');
  // wp_enqueue_script('example_poly2015_js');
  wp_enqueue_script('example_run5_js');
  wp_enqueue_script('example_run2015_js');
}

add_action('wp_enqueue_scripts', 'example_enqueue_script');



function example_test_function() {

echo '<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>HelloApp</title>
  <base href="/">
  <meta name="viewport" content="width=device-width, initial-scale=1">
<body>
  <app-root></app-root>
</body>
</html>';
}

add_action( 'wp_footer', 'example_test_function');
?>

我已经咨询了有关该主题的先前线程,并且在选择器等中正确声明了所有内容;纯 Angular 版本在生产和开发环境测试中都没有问题。

标签: javascriptangularwordpress

解决方案


<script>加载 JavaScript Angular 包的标签必须位于<app-root>HTML 元素之后。JavaScript 在加载后执行,如果 Html 的其余部分尚未加载,则选择器将无法找到<app-root>

如果无法移动<script>标签,则可以在读取 Html 文档后使用该属性defer运行 JavaScript。

<script src="javascript.js" defer></script>

推荐阅读