javascript - 为什么在 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 版本在生产和开发环境测试中都没有问题。
解决方案
<script>
加载 JavaScript Angular 包的标签必须位于<app-root>
HTML 元素之后。JavaScript 在加载后执行,如果 Html 的其余部分尚未加载,则选择器将无法找到<app-root>
。
如果无法移动<script>
标签,则可以在读取 Html 文档后使用该属性defer
运行 JavaScript。
<script src="javascript.js" defer></script>
推荐阅读
- javascript - 设置日期后的PHP显示信息
- angular - 按下后退浏览器按钮时忽略查询参数
- node.js - 使用 TypeORM 和 node.js/Hapi 将数据库调用与传入的 HTTP 请求相关联
- silverstripe - SilverStripe 4.1 电子邮件->addAttachment()?
- docker - Docker Compose:如何在构建时指定 docker 文件的路径,就像在不同的目录中一样?
- objective-c - 将 ObjC 功能桥接到 Swift 失败
- c++ - 如何在 VS Code 中包含自定义头文件
- swift - 设置高度:具有不同大小的自定义 Nib 的 TableViewCells
- postgresql - 参数化列时 FsSql 不起作用
- multithreading - vulkan屏障和多线程